MailのPlugInであるとともに,ActiveXサーバとしての実装もあります。DLLにActiveXサーバ用のCom実装を追加するだけだから,簡単だ」と思ったのですが...ここまで書いただけで,ActiveX/COMに詳しい方なら考えの浅さに気付かれるのかも知れません。いずれにしろ,それなりの試行錯誤の結果として,BeckyAxはめでたく日の目を見ることができました。備忘録もかねて,その経過を少しまとめておきたいと思います。PlugInをロードするためのインターフェースが定義されています。この機構は詳細にドキュメント化されている上に,SDKまで用意されているので,これに沿って機能を実装すれば,簡単にPlugInが作成できます。このSDKにはソースファイルのテンプレートまで含まれていて,まさに至れり尽くせりです。SDKはここから入手できます。含まれているドキュメントは(なぜか)英語ですが,日本語訳がここにあります。どちらもFreeです。感謝!!ActiveXサーバの実装ActiveXサーバの実装も,VC++の充実したウィザードのおかげで難しいところは何もありません。BeckyAxでは,ActiveXサーバ記述のフレームとして,ATLを使用しています。AppWizardを選択します。このウィザードは単純な作りで,操作は1ステップしかありません。DLLを併用するのですから,サーバタイプとして「ダイナミックライブラリ(DLL)」を選択して,終了します。これでスケルトンが完成しました。APIを使用する前に初期化処理が必要です。手始めに,これを実装することにしました。最初に,SDKに付属しているソースファイルにあるAPIクラスCBeckyAPIを継承するクラスを定義します。{};};BeckyAPIはすべて,このインスタンスを経由してコールします。このクラスはSingletonになっていて,このインスタンス取得時にAPIの初期化を行っています。次に,ActiveXインターフェースにメソッドを追加します。Wizardが作成してくれたIDLファイルにメソッドを追加しますが,VC++のATLサポートを利用して簡単に行うことができます。ここでは,以下のような感じで定義しました。*pVal);メソッドの戻り値として,バージョン文字列が取得できる手順です。ActiveXサーバクラス側の実装は,先ほどのBeckyクラスを使用して簡単にできました。}}catchブロック内のコードは,エラーを報告するためのものです。最初のテストと問題メソッドが1つできましたので,テストしてみることにしました。VC++からビルドし,出来上がったDLLをBecky!のプラグインフォルダにおきます。Becky!を再起動すれば,新しいPlugInのインストールを確認するダイアログが表示され,正しく認識されていることがわかります。PlugIn側は問題ありませんでしたので,ActiveXインターフェースを確認します。簡単なVBを使用することにしました。VBの新しいプロジェクトを立ち上げ,ActiveX参照を追加します。ライブラリ"という名称がありますので,これを参照設定してやります。これで,VBソース内でActiveXサーバインスタンスBeckyAxSvrが使用可能になっています。Subこんな感じになります。これをコンパイルして即実行,Becky!から取得したバージョン文字列がメッセージボックスに表示...されません。