掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
SendMessageのプロセス間通信でエラー (ID:147875)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
SendMessageでプロセス間通信をしたい プログラムA(送信側)からプログラムB(受信側)にWM_COPYDATAを使い、 3秒(Timer1)に1回文字列を送りたい。 環境:Windows7 Pro , VB 2010 Express 下記プログラムAにおいて ret = SendMessage・・・ の所で 「PInvokeStackImbalance が検出されました。 Message: PInvoke 関数 'Test_WatchDog!Test_WatchDog.Form1::SendMessage' がスタックを不安定にしています。 PInvoke シグネチャがアンマネージ ターゲット シグネチャに一致していないことが原因として考えられます。 呼び出し規約、および PInvoke シグネチャのパラメーターがターゲットのアンマネージ シグネチャに 一致していることを確認してください。」 のエラーが発生する。 Public Class Form1 Private Const WM_COPYDATA As Integer = &H4A Private WH_WatchDog As IntPtr Public Structure COPYDATASTRUCT Public dwData As Integer Public cbData As Integer Public lpData As String End Structure Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, _ ByVal lpWindowName As String) As IntPtr Private Declare Ansi Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hwnd As IntPtr, _ ByVal msg As Integer, _ ByVal wParam As Integer, _ ByVal lParam As COPYDATASTRUCT) As Integer Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim txt As String = "Dog" Dim ret As Integer WH_WatchDog = FindWindow(vbNullString, "WatchDog") '受信側のハンドル取得 If WH_WatchDog <> 0 Then Dim bytearry() As Byte = _ System.Text.Encoding.Default.GetBytes(txt) Dim len As Integer = bytearry.Length Dim cds As COPYDATASTRUCT cds.dwData = 0 cds.cbData = len + 1 cds.lpData = txt ret = SendMessage(WH_WatchDog, WM_COPYDATA, 0, cds) 'ここでエラー発生 End If End Sub End Class 解決のアドバイスをよろしくお願いいたします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.