いくつかのリソースがありますが、この大まかなトピックに対応するオンラインでは
というリソースがありますが、私の答えはまだわかりません。
PostMessageで文字列を送受信する
私は私のVB.netプロセスと私のC++プロセス間の全通信を持っていることを望みます。私はC++のプロセスからとに文字列を送信できるようにしたいが、私は達成するために必要な、当分の間:
はC++プロセスに文字列を送信し、それを扱います。 VBに次の関数宣言を使用し
これは私が確信がもてないいくつかのポイントを作成しますが、私はできるだけ単純にこれを維持しようとするでしょう...
。
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (_
ByVal hWnd As IntPtr, _
ByVal Msg As UInteger, _
ByVal wParam As IntPtr, _
ByVal lParam As String _
) As Boolean
メッセージを次のように送信します。 C++でメッセージを捕捉するための以下のメソッド宣言で
PostMessage(hWnd, SM_PING, Nothing, "schlampe")
。
LRESULT CALLBACK newWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
私が文字列にアクセスできるかどうかのテストは、
char buffer[50];
sprintf(buffer, "Received: %s", (char *)lParam);
MsgBox(buffer);
私は不必要であると信じる多くの詳細を超える脱脂が、尋ねると、それはあなたがたに与えられなければなりません。
私の問題は、メッセージがが受信され、「扱い」である...しかし、私のテストメッセージが含まれていないC++プロセスによって作成されたメッセージボックスが(:「受け取った:」それは読み)ということです。
PostMessage/SendMessage経由でVBからC++に文字列を送信するにはどうすればよいですか?
ソリューション:
は、ソリューションの受け入れ答えを見るが、さらに、ここで私は、文字列(C++)を受け取る方法です:
LRESULT CALLBACK newWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch(uMsg) {
case WM_COPYDATA:
MsgBox("Received a WM_COPYDATA message");
COPYDATASTRUCT * pcds = (COPYDATASTRUCT *)lParam;
LPCTSTR lpszString = (LPCTSTR)(pcds->lpData);
MsgBox(lpszString);
return 1L;
}
return CallWindowProc(instance->OriginalProcessor(), hwnd, uMsg, wParam, lParam);
}
最後にIPCの例here〜を使用しましたメッセージをに送信してください。この例ではC#を使用してメッセージを送信していますが、コンセプトは私が必要としていただけです(このコードをVBに変換するために公園内を歩くことは言及していません)。私のVBの実装では、null文字で文字列を終了する必要はなかったことに注意してください。
ウィンドウメッセージを使用する必要がありますか?あるいは、プロセス間のデータを最終目標にしていますか?後者については、それを実現するための[より良い方法](http://en.wikipedia.org/wiki/Interprocess_communication)があります。 – ulidtko
これを使用する前に、 'COPYDATASTRUCT'の基本的な検証を行うべきでしょう。いくつかの悪質なアプリケーションがあなたに偽の 'WM_COPYDATA'メッセージを送ることができます。 – jamesdlin