CMNロゴ

CPXの実装 (C++)



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の全てのメソッドを実装します。

モジュール定義ファイルの作成

モジュール定義ファイルを作成します。



戻る