Hallo,
ich habe zwei Anwendungen, die miteinander kommunizieren müssen. Die eine ist in C#, die andere in VB6. Es sollen Strings ausgetauscht werden.
Mehrere Versuche via Win-API-Funktion SendMessage fruchteten nicht so recht.
In VB6 verschicke ich Nachrichten so:
Private Declare Function SendMessageByStr& Lib "user32" Alias "SendMessageA" \_
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal \_
lParam As String)
[…]
Call SendMessageByStr(hwndTarget, MessageId, 4, "test")
In C# bearbeitet die WndProc-Funktion alle Nachrichten:
unsafe protected override void WndProc(ref Message m)
{
if (m.Msg == VB6\_TO\_CSHARP\_MessageId.ToInt32())
{
try
{
string url = new string((char\*)(m.LParam.ToPointer()), 0, m.WParam.ToInt32());
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
base.WndProc(ref m);
}
Aber leider löst diese eine Exception aus, weil der übermittelte String nicht ausgelesen werden kann.
Wer hat Beispielcode parat, um Strings (bzw. besser noch struct von strings und int) von C#- nach VB6-Anwendungen und umgekehrt zu schicken? Als Beispielprojekt kann folgendes von codeproject dienen:
http://www.codeproject.com/dotnet/VB6andVBNETWindowM… (im Beispielprojekt werden nur „einfache“ Messages verschickt ohne Strings).
Über gute Vorschläge oder Tips&Tricks freut sich,
André