CopyData im return zu C#
-
Hallo, ich versuche gerade ein CopyDataStruct im return einer WndProc zu schicken:
std::wstring filename = (wchar_t*)SendMessage(plugin.hwndParent ,WM_WA_IPC,wParam,IPC_GETPLAYLISTTITLEW); char buffer[1024]; std::string filenameMultibyte = NarrowString(filename,"C"); strcpy_s(buffer, filenameMultibyte.c_str()); COPYDATASTRUCT cds; cds.dwData = 0; cds.cbData = sizeof(buffer); cds.lpData = &buffer; return (LPARAM)&cds;Mein C# Code wäre dann der hier, Ich weiss nicht ob euch das hilft :<
IntPtr i = ApiDotNet.user32.SendMessage(Api.HWND, Api.WM_Playlist, (IntPtr)0, (IntPtr)0); try { IntPtr k = Marshal.AllocHGlobal(i); Api.COPYDATASTRUCT st = (Api.COPYDATASTRUCT)Marshal.PtrToStructure(k, typeof(Api.COPYDATASTRUCT)); byte[] B = new byte[st.cbData]; IntPtr lpData = new IntPtr(st.lpData); Marshal.Copy(lpData, B, 0, st.cbData); string playlist = Encoding.ASCII.GetString(B); Debug.WriteLine(playlist); Marshal.FreeHGlobal(k);Jedoch kommt in meiner anderen Applikation (C#) alles Genullt an.
Hat einer von euch eine Idee wieso?Grüße
-
CopyData.... da hast Du wohl was missverstanden...
Das geht nur mit der Nachricht "WM_COPYDATA"!
http://msdn.microsoft.com/en-us/library/ms649011
-
Hallo Jochen, danke für deine Antwort.
D.h es ist nicht möglich im return ein CopyData zu schicken?
da das ein Plugin ist, hab ich auch nicht die möglichkeit HWND zu nutzen, da das hwnd der host des plugins ist.
Gruß
-
Das geht so nicht. Dann musst Du halt sowas wie SharedMemory verwenden.
-
Alles Klar, Danke
