Kev*_*inA 0 c# c++-cli wndproc winforms
我正在尝试从C++/CLI向C#/ WinForms发送一个字符串
这是我的PostMessage
void Browser::NavigateTo(System::String^ address){
GCHandle gch = GCHandle::Alloc(address, GCHandleType::Pinned);
auto GCPin = gcHandle.AddrOfPinnedObject();
::PostMessage(procWndHandle, WM_NAVTO, 0, (LPARAM &GCPin);
}
Run Code Online (Sandbox Code Playgroud)
在Winform函数中,我试图像这样编组它
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name="FullTrust"]
protected override void WndProc(ref Message m)
switch (m.Msg) {
case WM_NAVTO:
string s = Marshal.PtrToStringUni(m.LParam);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我没有得到异常,但是我没有得到我发送的地址,而是我得到了Unicode Garbage.
我确信我错过了一些基本的东西,但我似乎无法看到它.有人可以帮忙吗?
您当前的代码存在一些问题:
PostMessage在返回之前不等待接收应用程序.因此,固定对象在处理消息之前变为取消固定,并且可以移动到存储器中的新位置.(这可能不是这里的主要问题.)要修复#2,您需要以某种方式将内存从一个进程复制到另一个进程.
WM_COPYDATA消息.此消息将Windows将您的数据(在本例中为字符串内容)从一个进程复制到另一个进程.请参阅MSDN上的" 使用数据复制"示例.| 归档时间: |
|
| 查看次数: |
310 次 |
| 最近记录: |