CPXの実装
CPXは、ICpx Interface から派生したクラスMyCpxを実装します。
MyCpxではICpx Interfaceから継承した関数を全て実装する必要があります。
ヘッダ定義
以下のヘッダをインクルードします。
その他実装に必要なヘッダがあれば追加でインクルードします。
#include "windows.h" // Windows用ヘッダ #include "objbase.h" // COM用ヘッダ #include "initguid.h" // GUID用ヘッダ #include "cpxsdk.h" // CPXSDKヘッダ
MyCpxクラス定義
ICpxから派生したクラスMyCpx(他のクラス名でも構いません)を定義します。
定義内容は以下の通りです。
必要があれば、メンバ関数やメンバ変数をprivateで追加定義します。
class MyCpx : public ICpx { MyCpx (void); // コンストラクタ ~MyCpx (void); // デストラクタ //---------------------------------------------------------------- // IUknown (COMの基本インターフェース) // virtual HRESULT __stdcall QueryInterface (const IID& iid, void **ppv); // インターフェース問い合わせ virtual ULONG __stdcall AddRef (void); // 参照カウンタインクリメント virtual ULONG __stdcall Release (void); // 参照カウンタデクリメント //---------------------------------------------------------------- // 共通 // virtual void __stdcall cpxGetExtInfoBase (TExtInfoBase *pExtInfoBase); // エクステンション基本情報取得 //---------------------------------------------------------------- // フォルダプロパティ用 // virtual void __stdcall cpxGetExtInfoProp (TExtInfoProp *pExtInfoProp); // フォルダプロパティ情報取得 virtual BOOL __stdcall cpxGetFolderDetailItem (int idxItem, TExtInfoDetail *pExtInfoDetail); // フォルダ詳細項目取得 virtual BOOL __stdcall cpxGetBBSDetailItem (int idxItem, TExtInfoDetail *pExtInfoDetail); // 掲示板詳細項目取得 virtual BOOL __stdcall cpxGetFolderDetailText (ICmnPilot *pICmnPilot, HWND hWndParent, LPCSTR lpszKey, LPSTR lpszData); // フォルダ詳細文字列取得 virtual BOOL __stdcall cpxGetBBSDetailText (ICmnPilot *pICmnPilot, HWND hWndParent, int idxBBS, LPCSTR lpszKey, LPSTR lpszData); // 掲示板詳細文字列取得 virtual BOOL __stdcall cpxGetTarget (ICmnPilot *pICmnPilot, HWND hWndParent, HWND hWndTarget); // 巡回対象選択 virtual BOOL __stdcall cpxGetFuncMenu (const tMes *pMes, tFuncMenu *pFuncMenu); // 機能メニュー取得 virtual BOOL __stdcall cpxWriteEditForm (ICmnPilot *pICmnPilot, int idxBBS, const TMes *pMes, BOOL bEditMes, LPCSTR lpSourceFormBuf, LPCSTR lpDestFormPath) =0; // フォームエディタ用フォーム作成 //---------------------------------------------------------------- // 巡回用 // virtual BOOL __stdcall cpxPilotStart (ICmnPilot *pICmnPilot); // 巡回開始 virtual void __stdcall cpxPilotEnd (ICmnPilot *pICmnPilot); // 巡回終了 virtual BOOL __stdcall cpxFolderPilotStart (ICmnPilot *pICmnPilot); // フォルダ巡回開始 virtual void __stdcall cpxFolderPilotEnd (ICmnPilot *pICmnPilot); // フォルダ巡回終了 virtual BOOL __stdcall cpxBBSPilotStart (ICmnPilot *pICmnPilot, int idxBBS); // 掲示板巡回開始 virtual void __stdcall cpxBBSPilotEnd (void); // 掲示板巡回終了 virtual void __stdcall cpxGetReceivedMesCount (int *pcDay, int *pcMes, LPVOID reserved); // 受信済み発言取得件数 virtual void __stdcall cpxGetReadURL (BOOL bForDisp, LPSTR lpszURL); // 受信URL作成 virtual BOOL __stdcall cpxReceiveMes (void); // 発言受信 virtual BOOL __stdcall cpxSendMes (const tMes *pMes); // 発言投稿 virtual BOOL __stdcall cpxExecFunc (const tMes *pMes, WORD wFunc); // 機能実行 //---------------------------------------------------------------- // 参照カウンタ private: long m_cRef; // 参照カウンタ };
インスタンス生成関数
CPXのインターフェースとなるMyCpxクラスのインスタンスを生成し、参照カウンタをインクリメントします。
CMNがCPXのインスタンスを生成する時にコールします。
以下のコードをそのまま使用してください。
HRESULT __stdcall cpxCreateInstance (IUnknown *pCMN, void **ppv) { IUnknown *pI = static_cast<ICpx*>(new MyCpx (pCMN)); // MyCpxを生成 pI->AddRef (); // 参照カウンタインクリメント *ppv = pI; // インターフェースポインタを戻す return S_OK; }
MyCpxのメソッドの実装
MyCpxの全てのメソッドを実装します。
モジュール定義ファイルの作成
モジュール定義ファイルを作成します。