Hallo Experten!
Ich bin zur Zeit auf der Suche nach der Ursache eines höchst interessanten Problems:
Folgende Ausgangssituation: Ein Programm (ca. 10 MB gross) und einige dazugehörige DLLs (zusammen nochmal ca. 10 MB) liegen auf einem Netzlaufwerk und werden von dort gestartet. Das Programm greift wieder übers Netz auf einen Oracle Server (anderer Server) zu. Das Programm selbst ist eine C++ Anwendung und mit VS 6.0 erstellt (allerdings nix MFC sondern auf einer externen class library [XVT] basierend).
Wenn ich nun das Programm starte, danach den Netzstecker ziehe (um intermittierende Netzprobleme zu simulieren) und im Programm versuche etwas zu tun, dann wird das Programm kommentarlos beendet (in den allermeisten Fällen, gaaaaanz spärlich gibt’s auch noch Fehlermeldungen vom Oracle Client, der sich über die verlorene Verbindung echauffiert). Das Problem tritt nicht auf, wenn ich Programm und DLLs von einer lokalen Platte ausführe - d.h. da regt sich der Oracle client natürlich immer noch auf, aber das Programm wird nicht kommentarlos beendet.
Jetzt kommt das eigentlich interessante: Bei dem von mir getesten Fall werden zwar noch einige Methoden korrekt ausgeführt, u.a. das Command Handling für den getesten Menü-Aufruf, aber beim Aufruf einer eigentlich recht trivialen Methode einer nicht abgeleiteten Klasse beendet sich das Programm. Hier kurz der Code, der sich verabschiedet:
long Klasse1::Methode1(long Par1, long Par2, char\* Par3)
{
MyClass::Message("1"); // kommt noch
return Klasse2::Methode2(Par1, Par2, Par3);
}
long Klasse2::Methode2(long, long, char\*)
{
MyClass::Message("2"); // der kommt nimmer
[...]
return 4711L;
}
Selbstredend natürlich, dass der obige Code problemlos läuft, wenn die Netzwerkverbindung intakt ist.
Es sieht also sehr danach aus, als würde er entweder den Aufruf von MyClass::Message() beim zweiten mal nicht mehr schaffen (was ihm aber direkt davor noch gelungen ist) oder eben den Aufruf von Klasse2::Methode2() (erscheint mir wahrscheinlicher).
Meine Interpretation ist, dass das OS (Win2K Pro) versucht im am Server liegenden EXE irgendwas nachzulesen (warum eigentlich?) und weil das eben nicht geht den raschen Tod der Anwendung beschliesst.
Irgendwie scheint mir das aber ein so krasses Fehlverhalten zu sein, dass ich mir kaum vorstellen hier keinen Bug meinerseits eingebaut zu haben (falsche Linker-Parameter o.ä.).
Endlich meine Frage: Kennt jemand das Problem bzw. eine Lösung dazu (d.h. wie ich dem Anwender noch eine einigermassen vernünftige Meldung zukommen lassen kann)?
Danke für Eure Zeit und hoffentlich auch Hilfe,
Martin