Я пытаюсь отправить строку из C++/CLI в C#/WinFormsОтправить Струнные от C++ для процессов C# с использованием WndProc
Вот мой 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);
}
В 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;
}
}
Я не получаю исключение, однако я не получаю адрес я послал, вместо этого я получаю Unicode Garbage.
Уверен, что у меня нет чего-то фундаментального, но я не вижу его. Может ли кто-нибудь помочь?
Просто чтобы уточнить: C++/CLI и C# являются полностью отдельными процессами? –
, если код C++/CLI и C# находится в отдельных процессах, вам необходимо выделить глобальную память. –
Правильно, это фундаментально. Только системные сообщения могут автоматически сортироваться по границам процесса. ОС не знает, что может означать WM_NAVTO и как нужно обрабатывать ее аргументы. WM_COPY будет работать. Рассмотрите именованный канал как самое превосходное решение. –