ich bin ziemlich am Ende mit meiner Weisheit. Ich bräuchte dringend eine Inspiration, wo die Ursache für mein Problem liegt.
Der Sachverhalt ist dieser:
Ich habe ein selbstgeschriebenes Rexx-Programm (genaugenommen: VX-Rexx). Ist ziemlich umfangreich und benutzt etliche externe DLLs, wie z.B. die bekannte RexxUtil.dll.
Das Programm dient meiner Medienverwaltung und ist praktisch täglich im Einsatz, seit nunmehr fast 10 Jahren. Zuletzt geändert am 10. April dieses Jahres. Aber, wie gesagt, wird jeden Tag aufgerufen, teilweise mehrfach. Gab nie Probleme. Auch die eingebundenen externen DLLs sind schon uralt und versehen seit x Jahren klaglos ihren Dienst. In allen eCS-Versionen seit Beginn, teilweise schon zu OS/2-Zeiten.
Nun passiert seit gestern urplötzlich folgendes:
Programm bricht in der Startphase ab mit einem Fehler beim Einbinden einer dieser externen DLLs: "Routine not found".
Die DLL, die geladen werden soll, heißt spUtils.dll. Ich weiß gar nicht mehr, wo ich die her habe. Ist vom 15.2.2004.
Mit diesen Befehlen wird sie eingebunden:
Code: Alles auswählen
rc = RxFuncAdd("spLoadFuncs", "spUtils", "spLoadFuncs") ;
rc = spLoadFuncs();
Die übliche Ursache für diesen Abbruch ist ein Fehlen der DLL. Das kann ich aber mit 100%iger Sicherheit ausschließen. Die DLL befindet sich seit Jahren im Pfad, ausserdem habe ich sie jetzt mal hilfsweise zusätzlich ins Programmverzeichnis kopiert. Einen Schreibfehler (z.B. falsch geschriebener Name des DLL-Einsprungpunktes 'spLoadFuncs') schließe ich ebenfalls aus, weil das Programm 'kompiliert', d.h. als Exe vorliegt und bisher immer funktioniert hat.
Ist die DLL vielleicht physisch kaputt? Um das auszuschließen, habe ich die DLL von einer Datensicherung zurückkopiert, sicherheitshalber gleich von zwei verschiedenen Sicherungen. Datei-Größe, - Datum in allen Fällen identisch. Hilft alles nix. Er kann die DLL nicht laden.
Dummerweise liefert der vorausgehende Befehl RxFuncAdd() keinen aussagefähigen Returncode. Bei mir ist er in allen Fällen immer "1".
Insgesamt lädt mein Programm diese DLLs, alle erfolgreich, bis auf die letzte in dieser Reihe:
Code: Alles auswählen
nok = RxFuncAdd("SysLoadFuncs", "RexxUtil", "SysLoadFuncs") ;rc = SysLoadFuncs();
nok = RxFuncAdd("FileLoadFuncs", "FILEREXX", "FileLoadFuncs");rc = FileLoadFuncs();
nok = RxFuncAdd("RxExtra", "RxExtras", "RxExtra") ;rc = RxExtra("LOAD");
nok = RxFuncAdd("mciRxInit", "MCIAPI", "mciRxInit") ;rc = mciRxInit();
nok = RxFuncAdd("PrxLoadFuncs", "PRXUTILS", "PRXLOADFUNCS") ;rc = PrxLoadFuncs(); /* Date-Functions */
nok = RxFuncAdd("FtpLoadFuncs", "rxFtp", "FtpLoadFuncs") ;rc = FtpLoadFuncs();
nok = RxFuncAdd('RxgdLoadFuncs', 'RXGDUTIL', 'RxgdLoadFuncs');rc = RxgdLoadFuncs();
nok = RxFuncAdd("SockLoadFuncs", "RxSock", "SockLoadFuncs");rc = SockLoadFuncs("bypass_copyright");
nok = RxFuncAdd("spLoadFuncs", "spUtils", "spLoadFuncs") ;rc = spLoadFuncs();
Ich habe auch keine erkennbaren RAM-Probleme. Aktuell sind 2,2 GB (von 4) unbenutzt. Alle anderen DLLs werden geladen (s. o. Codesequenz).
Im POPUPLOG.OS2 befindet sich auch kein Eintrag. Wo kann ich noch schauen?
Ich bin echt am Ende mit meiner Weisheit. Vor allem auch, weil ich an der ganzen Programmierumgebung nix geändert habe.
Wenn ich sage, dass der Fehler urplötzlich, ohne äußeren Anlass aufgetreten ist, stimmt das nicht ganz: Am Tag zuvor hatte ich Probleme mit einem USB-Stick, den mein eCS nicht erkannt hat, was zu einem Freeze mit anschliessendem Hard-Reset geführt hat. Danach ist der PC aber normal wieder gestartet und es gab auch keine Chkdsk-Leichen ("LOST FILES"). Und ja, ich habe den PC mehrfach neu gebootet. Aber offenbar hat dieser USB-Absturz irgendwas an meinem System so verändert, dass genau nur diese eine spUtils.dll nicht mehr geladen werden kann.
Sorry für diese langatmige Beschreibung. Aber ich weiß echt nicht mehr weiter und brauche mal externe Fantasie und/oder Sachkenntnis.
Danke bis hierher,
Lutz W.