0

ある種のプラグインであるDLLからのSAPIメッセージを処理したいと思います。VC++dll内のメッセージ/イベントを処理する方法。SAPIイベント処理は、次の例に示されています:http: //msdn.microsoft.com/en-us/library/ms720165%28VS.85%29.aspx

4

3 に答える 3

5

「通常の」メッセージを処理するには、Windowオブジェクトが必要です。これは、メッセージングキューインフラストラクチャのみを通常のウィンドウと共有する特別な「メッセージのみ」のウィンドウにすることができます。作成するには、まずメッセージ処理クラスをに登録しますRegisterClass()HWND_MESSAGE次に、親ウィンドウとしてに渡すことにより、メッセージキューを作成しますCreateWindow()。その後、SAPIに戻ることができるHWNDが返されます。

ただし、SAPIは他のインターフェイスもサポートしています。ISpNotifySourceのドキュメント名4:Windowsメッセージ、コールバック、イベント、およびCOM(ISpNotifySink)。コールバックを使用するには、DLLメソッドの1つのアドレスをに渡すだけSetNotifyCallbackFunctionです。

于 2009-08-17T08:46:39.590 に答える
1

コードがプラグインとして実行されている場合は、ISpNotifySource::SetNotifyWindowMessageの代わりにISpNotifySource:: SetNotifyCallbackFunctionを使用してSAPIから直接コールバックすることを検討してください。SAPIは、イベントが発生したときに関数を直接呼び出します。

于 2009-09-20T23:54:31.023 に答える
0

WndProcは、ウィンドウに向けられたすべてのメッセージ/イベントを受信するために使用されます。

DLLはウィンドウを作成し、ウィンドウへのメッセージを待つ必要があります。可能であれば、これをメインプロセスに実装する必要があります。または、実際の関数が制御をプロセスに戻す間、dllにウィンドウを作成してメッセージを待機する別のスレッドを作成させることができます。

于 2009-08-15T14:56:11.520 に答える