MFC部品のプラグイン化 その2~

MFCの共有DLLを使用して作成したDLLの関数内で、DLL内のリソースにアクセスするためには、その関数の中でリソースを取得する前に、以下のマクロを呼び出す必要があることが分かった。
AFX_MANAGE_STATE(AfxGetStaticModuleState());

このマクロを使用すると、現在のモジュール状態(現在のスレッド上からMFCがどのモジュールを参照するか)を正しいものと入れ替える。この入れ替え状態は現在のスコープ内で有効なため、関数から抜けると、自動的に元の状態に戻る。

これで、DLL内リソースのダイアログの表示や、ツールバーの作成はできるようになるが、まだ問題が残っている。
ツールバーの親ウインドウはメインアプリケーションのCMainFrameクラスにする必要があるため、コマンド(ボタンのクリックイベント)がCMainFrameに送られてしまう。
何とかこのメッセージをDLL内の関数に転送する必要がある。また、ボタンごとのコマンドIDについても、既存のものや、他のDLLからインポートしたもの(複数のDLLをプラグインとして読み込んだ場合など)と重複しないように定義し直す必要がありそうだ。

※モジュール状態の詳細は、MSDNの「テクニカル ノート 58」を参照のこと。
[PR]
by isoq | 2004-02-19 10:21 | C/C++/Win32
e87.com(千趣会イイハナ) 花を贈るなら日比谷花壇
<< Microsoft Virtu... MFC部品のプラグイン化 >>