Hi,
Ich versuche mit C# einen string/string pointer per Windos Message mit Invoking zu schicken.
Das ganze funktioniert auch problemlos.
Aber wenn ich jetzt versuche die Message in einer MFC Anwendung zu empfangen:
Bekomme ich die Werte:
Wparam = 1234
Lparam = 84393680
Der String:
lp = 0x0048a018 “”
oder
0x004da1b8 “Y+Ö”
oder andere kryptische sachen. Mit StringToHGlobalAnsi das Gleiche. Wie bekomme ich denn den richtigen string wieder raus?
Mit freundlichen Grüßen
Vielen Dank
Ich versuche mit C# einen string/string pointer per Windos Message mit Invoking zu schicken.
Code:
#region SendReceiveMessage [DllImport("user32.dll")] public static extern IntPtr FindWindow(string strClassName, string strWindowName); [DllImport("user32.dll")] public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); public const int WM_APP = 0x8000; public const int WM_MYMSG =WM_APP + 0x100; void SendMessageToUnmanaged() { IntPtr hWnd = FindWindow(null, "Fenstername"); string s = "Somestring"; IntPtr sNative = Marshal.StringToHGlobalAuto(s); IntPtr result = SendMessage(hWnd, WM_MYMSG, (IntPtr)1234, sNative); Marshal.FreeHGlobal(sNative); /* IntPtr ptr = Marshal.StringToHGlobalAnsi(Environment.CommandLine); IntPtr result = SendMessage(hWnd, WM_MYMSG, (IntPtr)1234, ptr); */ } #endregion
Aber wenn ich jetzt versuche die Message in einer MFC Anwendung zu empfangen:
Code:
BEGIN_MESSAGE_MAP(CIProgDlg, CDialog) ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_BN_CLICKED(IDC_BUTTON2, &CIProgDlg::OnBnClickedButton2) // Eigene Message ON_MESSAGE ( WM_MYMSG, OnMyMsg ) END_MESSAGE_MAP() // Eigene Message LRESULT CIProgDlg::OnMyMsg(WPARAM wParam, LPARAM lParam) { int wP = wParam; char* lP = (char*)lParam; return MessageBox(L"Hello",L"Top",MB_OK); }
Wparam = 1234
Lparam = 84393680
Der String:
lp = 0x0048a018 “”
oder
0x004da1b8 “Y+Ö”
oder andere kryptische sachen. Mit StringToHGlobalAnsi das Gleiche. Wie bekomme ich denn den richtigen string wieder raus?
Mit freundlichen Grüßen
Vielen Dank