我想獲得一個C#WPF應用程序與使用WM_COPYDATA在C中編寫的另一個應用程序進行通信。的C應用程序試圖按以下方式發送一個結構:WM_COPYDATA消息的編組結構
typedef struct
{
int x;
int y;
char str[40];
double d;
char c;
} DATASTRUCT;
在我的C#應用程序我已經定義了一個結構如下:
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
public struct DATASTRUCT
{
public int x;
public int y;
[MarshalAs(UnmanagedType.LPStr, SizeConst=40)]
public string s;
public double d;
public char c;
};
和代碼接收WM_COPYDATA消息如下:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
hwndSource = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle);
hwndSource.AddHook(new HwndSourceHook(WndProc));
}
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (msg == 0x4A)
{
DATASTRUCT data = (DATASTRUCT)Marshal.PtrToStructure(lParam, typeof(DATASTRUCT));
this.updateText(data);
handled = true;
}
return (IntPtr)0;
}
我正在從C應用程序接收消息,但結構中的所有數據都是亂碼。在此之前,我能夠從lParam指針手動提取一個字節數組,然後使用System.BitConverter和System.Text.Encoding.ACII來解釋字節數組,並且工作得很好。但現在我正在嘗試以一種更清潔的方式來實現,而這只是無效。