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