CMNロゴ

CPXの実装 (Delphi)



CPXの実装

CPXは、ICpx Interface から派生したクラスMyCpxを実装します。
MyCpxではICpx Interfaceから継承した関数を全て実装する必要があります。

ライブラリ定義

library に続けてソースファイルの拡張子を除いたファイル名を記述します。
(実際のファイル名に合わせてください。)
library cmn_sampled;

ユニット定義

以下のユニットを定義します。
その他実装に必要なユニットがあれば追加で定義します。
uses
  SysUtils,
  Windows,
  ComObj,
  Classes,
  cpxsdk;

MyCpxクラス定義

ICpxから派生したクラスMyCpx(他のクラス名でも構いません)を定義します。
定義内容は以下の通りです。
必要があれば、メンバ関数やメンバ変数をprivateで追加定義します。
type

    TMyCpx = class (TObject, ICpx)

    public
    constructor Create;                     // コンストラクタ
    destructor Destroy; override;           // デストラクタ

    protected
    //----------------------------------------------------------------
    // IUknown (COMの基本インターフェース)
    //
    function QueryInterface(const iid: TGUID; out ppv): HResult; virtual; stdcall;                                      // インターフェース問い合わせ
    function _AddRef: Integer; virtual; stdcall;                                                                        // 参照カウンタインクリメント
    function _Release: Integer; virtual; stdcall;                                                                       // 参照カウンタデクリメント

    //----------------------------------------------------------------
    // 共通
    //
    procedure cpxGetExtInfoBase (var ExtInfoBase: TExtInfoBase); virtual; stdcall;                                      // エクステンション基本情報取得

    //----------------------------------------------------------------
    // フォルダプロパティ用
    //
    procedure cpxGetExtInfoProp (var ExtInfoProp: TExtInfoProp) ; virtual; stdcall;                                     // フォルダプロパティ情報取得
    function  cpxGetFolderDetailItem (idxItem: Integer; var ExtInfoDetail: TExtInfoDetail): LongBool; virtual; stdcall; // フォルダ詳細項目取得
    function  cpxGetBBSDetailItem (idxItem: Integer; var ExtInfoDetail: TExtInfoDetail): LongBool; virtual; stdcall;    // 掲示板詳細項目取得
    function  cpxGetFolderDetailText (pICmnPilot: ICmnPilot; hWndParent: HWND; lpszKey: LPSTR;
                                      lpszData: LPSTR): LongBool; virtual; stdcall;                                     // フォルダ詳細文字列取得
    function  cpxGetBBSDetailText (pICmnPilot: ICmnPilot; hWndParent: HWND; lpszKey: LPSTR;
                                   idxBBS: Integer; lpszData: LPSTR): LongBool; virtual; stdcall;                       // 掲示板詳細文字列取得
    function  cpxGetTarget (pICmnPilot: ICmnPilot; hWndParent: HWND; hWndTarget: HWND): LongBool; virtual; stdcall;     // 巡回対象選択
    function  cpxGetFuncMenu (const pMes: PMes; pFuncMenu: PTFuncMenuArray): LongBool; virtual; stdcall;                // 機能メニュー取得
    function  cpxWriteEditForm (pICmnPilot: ICmnPilot; idxBBS: Integer; const pMes: PTMes; bEditMes: LongBool;
                                lpSourceFormBuf: LPCSTR; lpDestFormPath: LPCSTR): LongBool; stdcall;                    // フォームエディタ用フォーム作成

    //----------------------------------------------------------------
    // 巡回用
    //
    function  cpxPilotStart (pICmnPilot: ICmnPilot): LongBool; virtual; stdcall;                                        // 巡回開始
    procedure cpxPilotEnd (pICmnPilot: ICmnPilot); virtual; stdcall;                                                    // 巡回終了
    function  cpxFolderPilotStart (pICmnPilot: ICmnPilot): LongBool; virtual; stdcall;                                  // フォルダ巡回開始
    procedure cpxFolderPilotEnd (pICmnPilot: ICmnPilot); virtual; stdcall;                                              // フォルダ巡回終了
    function  cpxBBSPilotStart (pICmnPilot: ICmnPilot; idxBBS: Integer): LongBool; virtual; stdcall;                    // 掲示板巡回開始
    procedure cpxBBSPilotEnd; virtual; stdcall;                                                                         // 掲示板巡回終了
    procedure cpxGetReceivedMesCount (var cDay: Integer; var cMes: Integer; reserved: Pointer); virtual; stdcall;           // 受信済み発言取得件数
    procedure cpxGetReadURL (bForDisp: LongBool; lpszURL: LPSTR); virtual; stdcall;                                     // 受信URL作成
    function  cpxReceiveMes: LongBool; virtual; stdcall;                                                                // 発言受信
    function  cpxSendMes (const pMes: PMes): LongBool; virtual; stdcall;                                                // 発言投稿
    function  cpxExecFunc (const pMes: PMes; wFunc: WORD): LongBool; virtual; stdcall;                                  // 機能実行

    //----------------------------------------------------------------
    // 参照カウンタ
    private
    m_cRef: Integer;                        // 参照カウンタ

    end;

インスタンス生成関数

CPXのインターフェースとなるMyCpxクラスのインスタンスを生成し、参照カウンタをインクリメントします。
CMNがCPXのインスタンスを生成する時にコールします。
以下のコードをそのまま使用してください。
function cpxCreateInstance (out ppv: TMyCpx): HResult; stdcall;
begin;
    ppv := TMyCpx.Create(); // MyCpxを生成 (_AddRefはしない)
    Result := S_OK;
end;

インスタンス生成関数エクスポート

cpxCreateInstance をエクスポートします。
exports
    cpxCreateInstance;

MyCpxのメソッドの実装

MyCpxの全てのメソッドを実装します。



戻る