我写了一个底层钩子,然后把截获的信息用WM_COPYDATA发给窗体,因为DLL是C++写的,窗体是C#的,所以用Marshal.PtrToStringAnsi时多接收几条后就会出现尝试读取受保护的内存,这通常指示其它内存已损坏?怎么办?
[StructLayout(LayoutKind.Sequential)]
public struct COPYDATASTRUCT
{ public IntPtr dwData; public int cbData; public IntPtr lpData; }
if (msg == 0x004A)
{
WinAPIUtil.COPYDATASTRUCT cds = new WinAPIUtil.COPYDATASTRUCT();
cds = (WinAPIUtil.COPYDATASTRUCT)Marshal.PtrToStructure(lParam, cds.GetType());
this.richTextBox1.AppendText("HWND :" + cds.dwData + " type :" + Marshal.PtrToStringAnsi(cds.lpData).Substring(0, cds.cbData) + "\r\n");
}
[StructLayout(LayoutKind.Sequential)]
public struct COPYDATASTRUCT
{ public IntPtr dwData; public int cbData; public IntPtr lpData; }
if (msg == 0x004A)
{
WinAPIUtil.COPYDATASTRUCT cds = new WinAPIUtil.COPYDATASTRUCT();
cds = (WinAPIUtil.COPYDATASTRUCT)Marshal.PtrToStructure(lParam, cds.GetType());
this.richTextBox1.AppendText("HWND :" + cds.dwData + " type :" + Marshal.PtrToStringAnsi(cds.lpData).Substring(0, cds.cbData) + "\r\n");
}
没试过,建议而已.