更新:これは、.NETクライアントが通常のDLLを呼び出しているときです。私はまた、いくつかのクラスをエクスポートし、通常のDLLで使用される別の拡張DLLを持っています。.NETクライアント - MFC正規DLLとユーザー定義メッセージ
WindowHandleとユーザー定義のメッセージをパラメータとして受け取り、渡されたウィンドウにメッセージを送信するサードパーティのDLLがありますが、自分のウィンドウにメッセージが表示されません。以下は、APIの呼び出し形式です:
StartMessaging(<WindowHandle>,WM_MESSAGE_API);
私はちょうどメッセージを受信するために隠されたCFrameWndのウィンドウを作成する通常のMFC標準DLLを必要としていました。 また、DLLのすべてのエントリポイントでAFX_MANAGE_STATE()を使用しています。私のCFrameWndの派生クラスで
コンストラクタコード:
(NULL、 "mywindowを")を作成します。 hWndFrame = this-> m_hWnd;
メッセージマップ:
LRESULT CMyDerivedWnd::OnMsgApi(WPARAM wParam, LPARAM lParam)
{
OutputDebugString("OnMsgApi");
return (LRESULT)0;
}
StartMessagingが呼ばれた私のメインクラス:コンストラクタで 私はCFrameWndのオブジェクトをインスタンス化:
myDerivedWnd =新しいCMyDerivedWnd(この);
、その後InitiateMessagingが呼び出されます。
void CMain::InitiateMessaging()
{
TCHAR szBuf[80];
::GetWindowText(myDerivedWnd->m_hWnd,szBuf,80);
OutputDebugString((LPSTR)(LPCTSTR)szBuf); //This displays MYWINDOW
StartMessaging(myDerivedWnd->m_hWnd,WM_MESSAGE_API);
}
マイGetWindowText関数は、正しいウィンドウの名前を返しますが、私はこのクラスのトラップWM_MESSAGE_APIメッセージすることができません。 私はまた、拡張DLLを使用してみましたが、同じ結果です。
同じAPIで動作するサンプルのMFCダイアログベースのアプリケーションがあります。 – cloudnine
この通常のDLLが.NETクライアントから呼び出されているのを忘れてしまいました。 – cloudnine