Probleme bei Datenaustausch zwischen 2 Prozessen

05/06/2008 - 09:02 von Denise | Report spam
Hallo,

ich tausche zwischen einer c# und einer vb6 Anwendung Daten über
SendMessageTimeout aus. Es werden etwa sekündlich Daten (Telegramme als
String) von der C#-Anwendung an den vb6 Prozess geschickt. Der VB 6 Prozess
schickt dann ein Acknowldge, dass er die Daten erhalten hat.

Das ganze funktioniert so etwa 11-12 Stunden einwandfrei, doch dann stürzt
die VB6-Anwendung mit Fehler ab. (fehlheschlagene Anwendung vb6.exe,
fehlgeschlagenes Modul kernerl32.dll) Der Fehler ist so in der
Ereignisanzeige zu sehen.

Kann mir jemand erklàren was da schief làuft und wie man es beheben kann?
Oder mir auch sagen was für eine Kommunikation zwischen den Prozessen evtl.
besser wàre?

Vielen Dank!
Gruß Denise
 

Lesen sie die antworten

#1 Juergen Thuemmler
06/06/2008 - 20:31 | Warnen spam
Hallo Denise,

ich tausche zwischen einer c# und einer vb6 Anwendung Daten über
SendMessageTimeout aus. Es werden etwa sekündlich Daten (Telegramme als
String) von der C#-Anwendung an den vb6 Prozess geschickt. Der VB 6
Prozess
schickt dann ein Acknowldge, dass er die Daten erhalten hat.

Das ganze funktioniert so etwa 11-12 Stunden einwandfrei, doch dann stürzt
die VB6-Anwendung mit Fehler ab. (fehlheschlagene Anwendung vb6.exe,
fehlgeschlagenes Modul kernerl32.dll) Der Fehler ist so in der
Ereignisanzeige zu sehen.

Kann mir jemand erklàren was da schief làuft und wie man es beheben kann?
Oder mir auch sagen was für eine Kommunikation zwischen den Prozessen
evtl.
besser wàre?



ohne zu wissen, was Du mit dem String machst, làßt sich da schwer etwas
sagen. Grundsàtzlich sollte man die Funktion, in der SendMessage() empfangen
wird (hier vermutlich mit WM_COPYDATA), so schnell wie möglich wieder
verlassen. Das kann z.B. heißen, den String einfach einer Collection
hinzufügen und dann die Collection - die quasi als Puffer dient -
timergesteuert oder anders abarbeiten.
Auch Dein Acknowledge ist unklar - SendMessage? Das sollte man nur dann
verwenden, wenn es zwingend notwendig ist, ansonsten ist PostMessage die
bessere Wahl. Ich benutze das hàufig zum Entkoppeln von Code gerade in
Callbackfunktionen (meist in Verbindung mit der "callback.dll"
http://allapi.mentalis.org/vbexampl...egory=MISC
um das Subclassing zu vermeiden). Man kann auch Strings 'von außen' direkt
mit LB_ADDSTRING in eine Listbox einfügen lassen, was in manchen Fàllen
vorteilhaft sein kann, aber wie gesagt - ohne detailliertere Infos ist eine
Ferndiagnose schwierig...

Jürgen.

Ähnliche fragen