WINSOCK を使用するマネージ C++ DLL があります。受信すると、PostMessage() を介してカスタム メッセージを CWnd * に送信します。これは、アンマネージ C++ から呼び出された場合に正常に機能します。ターゲット CWnd * は、次のコードを使用した構築後に C++ クラスに登録されます。
// Registers a window (CWnd *) to receive a message when a valid
// incoming data packet is received on this UdpRetrySocket.
void CUdpRetrySocket::RegOnReceive(CWnd *i_pOnReceiveWnd, UINT i_RecvMsgId = WM_USER_RECV_DATA_AVAIL)
{
m_pOnReceiveWnd = i_pOnReceiveWnd;
m_RecvMsgId = i_RecvMsgId;
}
メッセージを CWnd に投稿するコードは次のとおりです *
// If there is a pending incoming packet and there is a window
// registered for receive notification then post a message to it.
if (m_bInPktPending && m_pOnReceiveWnd != NULL)
m_pOnReceiveWnd->PostMessage(m_RecvMsgId,
(WPARAM)m_RecvSocket.LocalSockAddrIn().Port(),
(LPARAM)this
);
現在、C# Windows フォーム アプリケーションからこの CUdpRetrySocket クラスを使用しています。質問:
C# Forms クラスから CWnd * を取得して C++ CUdpRetrySocket クラスに登録する方法
// C++ Register Window Method void RegOnReceive(System::IntPtr i_Hwnd) { m_pOnReceiveWnd = CWnd::FromHandle((HWND)i_Hwnd.ToPointer()); } // C# Caller of Register Window Method class MyForm : Form { . . . cmdDev.RegOnReceive(Handle);
C# ウィンドウでイベントを作成して、このカスタム MFC スタイル メッセージをキャプチャするにはどうすればよいですか?
ウィンドウが最小化されている場合でも、パケットを処理するには C# アプリが必要です。C# フォーム ウィンドウは、最小化されている場合でもこれらのメッセージを受け取りますか?
これを行うより良い方法はありますか?