Hi Norbert,
>kann ich an dem ERRORHANDLER-Label nichts anderes tun, als mein Programm abzubrechen
Mhm. Normalerweise wird so eine DLL ja auch vom Programm benötigt, so daß das Abbrechen des Programms die gewünschte Aktion sein sollte ;-)
Es geht aber auch anderes, den nur die aktuelle Prozedur wird abgebrochen. Da.h die Initialisierung muß in eine prozedur ausgelagert werden. Teste mal das hier:
/* Rexx */
say 'Hello world!'
call InitDLL
say "bye"
exit
InitDLL: procedure
signal on SYNTAX name ERRORHANDLER
call RXFuncDrop 'SysLoadFuncs'
rc= RxFuncAdd('SysLoadFuncs', 'RexxUtilo', 'SysLoadFuncs')
call SysLoadFuncs
return
ERRORHANDLER:
say 'Error: DLL initialisation failed.'
return
/* ende */
>tattdessen jedesmal den SysLoadFuncs aufrufe, richtet das doch auch keinen Schaden an, oder?
Offen gesagt: ich weiß es nicht. Aber ich habe hier relativ viele Rexx und VisproRexxtools laufen, und mir ist es recht häufig passiert, das sich die Rexx - Unterstützung irgendwann systemweit weggehangen hat. Seitdem schreib ich das so (und droppe auch nicht mehr benötigte Variablen usw.). Ich kann da keinen Zusammemnhang beweisen, würde aber empfehlen immer so sauber wie möglich zu programmieren.
>eine Funktion wie SysSearchPath
Du kannst vieleicht den Libpath aus der Environmentvariablen auslesen (oder aus der config.sys), und dann die DLL suchen. Das ist aber aufwendig und langsam...
Grüße
Frank
[ Leser: 45 ] |