Hallo!
Ich muss von meinem C#-Programm heraus mit einem 3rd-party-Programm kommunizieren, bilateral. Das ist ein altes C++ - Programm, es kann nur über WM_COPYDATA angesprochen werden (die Beschreibung habe ich).
Im Internet habe ich ein paar Hinweise gefunden, denen nach es ziemlich leicht sein soll, und zwar:
(1) ich schaffe einen Interop-Aufruf zu SendMessage()
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| public struct CopyData { public IntPtr dwData; public int cbdata;
[MarshalAs(UnmanagedType.SysInt)] public IntPtr lpData; }
[DllImport("user32.dll")] private static extern int SendMessage(IntPtr hReceiver, IntPtr hSender, int wParam, ref CopyData lParam); ... |
und sende WM_COPYDATA messages zu der Anwendung (hReceiver ist mir dann bekannt)
(2) Das auf die WM_COPYDATA messages hören tue ich über WndProc() oder DefWndProc().
Soweit, hört sich alles logisch an, nur dass die Anwendung meine messages definitiv nicht kriegt (return value in SendMessage() ist gleich 0). Dass die Anwendung selbst i.O. ist, ist auch klar, denn mit einem anderen, mit C++ geschriebenen Sender funktioniert es.
Ich vermute, dass die Ursache in der Definition der CopyData Klasse liegt: sie ist zu tolerant.
Hat jemand die Erfahrung, wie eine Struktur an dieser Stelle sein soll? Ich werde die Möglichkeiten der Reihe nach ausprobieren, aber vielleicht hat jemand ein fertiges Rezept? Wäre nett!
Dank im voraus!
Stane
Moderiert von
Kha: C#-Tags hinzugefügtModeriert von
Kha: Topic aus C# - Die Sprache verschoben am Mi 08.04.2009 um 14:21