Autor Beitrag
kyon86
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Fr 19.09.08 23:59 
Hi,
Ich versuche mit C# einen string/string pointer per Windos Message mit Invoking zu schicken.

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
        #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


Das ganze funktioniert auch problemlos.
Aber wenn ich jetzt versuche die Message in einer MFC Anwendung zu empfangen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
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);
}


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

Moderiert von user profile iconNarses: Code- durch C#-Tags ersetzt