ある種のプラグインであるDLLからのSAPIメッセージを処理したいと思います。VC++dll内のメッセージ/イベントを処理する方法。SAPIイベント処理は、次の例に示されています:http: //msdn.microsoft.com/en-us/library/ms720165%28VS.85%29.aspx
3 に答える
「通常の」メッセージを処理するには、Windowオブジェクトが必要です。これは、メッセージングキューインフラストラクチャのみを通常のウィンドウと共有する特別な「メッセージのみ」のウィンドウにすることができます。作成するには、まずメッセージ処理クラスをに登録しますRegisterClass()
。HWND_MESSAGE
次に、親ウィンドウとしてに渡すことにより、メッセージキューを作成しますCreateWindow()
。その後、SAPIに戻ることができるHWNDが返されます。
ただし、SAPIは他のインターフェイスもサポートしています。ISpNotifySourceのドキュメント名4:Windowsメッセージ、コールバック、イベント、およびCOM(ISpNotifySink)。コールバックを使用するには、DLLメソッドの1つのアドレスをに渡すだけSetNotifyCallbackFunction
です。
コードがプラグインとして実行されている場合は、ISpNotifySource::SetNotifyWindowMessageの代わりにISpNotifySource:: SetNotifyCallbackFunctionを使用してSAPIから直接コールバックすることを検討してください。SAPIは、イベントが発生したときに関数を直接呼び出します。
WndProcは、ウィンドウに向けられたすべてのメッセージ/イベントを受信するために使用されます。
DLLはウィンドウを作成し、ウィンドウへのメッセージを待つ必要があります。可能であれば、これをメインプロセスに実装する必要があります。または、実際の関数が制御をプロセスに戻す間、dllにウィンドウを作成してメッセージを待機する別のスレッドを作成させることができます。