Seite 1 von 1

Fehler in DLL mit Proceduren

Verfasst: 09.03.2005 23:59
von MVXA
Hallo!
Ich hab n kleineres Problem. Ich hab mir ein Plugin Interface zusammen geschrieben und da ich nicht immer so lange Funktionsaufrufe mit CallFunctionFast haben möchte, habe ich mir fix ein "warpper" geschrieben:

Code: Alles auswählen

Procedure CallBack(strCMD.s, strData1.s, strData2.s)
    DefType.l lngResult 
    
    lngResult = CallFunctionFast(ptrPluginCallBack, ptrApplikationID, strCMD, strData1, strData2) 
    ProcedureReturn PeekS(lngResult)
EndProcedure
Mein einziges Problem ist aber, dass sich nach dem diese Funktion zum Ende kommt sich das Programm aufhängt -_-. á la "programm hat ein problem festgestellt und musste beendet werden". Aber wenn ich diesen aufruf direkt in eine ProcedureDLL (mit anderem Code) schreibe, stürzt nix ab. Warum?

offtopic:
Auch gut. Es gibt keine Bugs, weil das Forum nicht in der Lage ist, ein Post aufzunehmen, wenn es gerade Off ist.

edit:
Anscheinend tritt dieses Phänomen nur dann auf, wenn das Wirtprogramm im Debug modus läuft. Toll. Kann ich den Debugger nu knicken -_-.

Verfasst: 10.03.2005 00:46
von bluejoke
Muss das nicht

Code: Alles auswählen

procedure.s
statt
procedure
heißen?

Verfasst: 10.03.2005 02:22
von Laurin
Jup, das ist korrekt.

Bei Prozeduren, die einen String (auch bei Floats?) zurückgeben, muss man unbedingt Procedure.s schreiben. Die Erfahrung hatte ich auch schon.

Was auch wichtig ist, dass die Rückgaben immer (!) in irgendwelche Variablen gespeichert werden, selbst man sie nicht verwenden will. So hab ich nämlich mal ein instabiles Programm repariert.


Greetz Laurin

Verfasst: 10.03.2005 07:57
von MVXA
Jaja, mein Fehler, den ich beim Posten gemacht hab. Das PeekS war in einem Kommentar. Das .s hängt da auch dran. ich hab nur mal getestet ob es daran liegen könnte, das ich versuche, einenen String innerhalb einer DLL zurück zu geben.

Verfasst: 10.03.2005 15:12
von MVXA
Nochwas herausgefunden:

Code: Alles auswählen

Procedure.s Library_CallBack(lngAppID.l, strCMD.s, strData1.s, strData2.s)
    SelectElement(AppPool(), lngAppID)
    
    Debug "CMD: " + strCMD + "/DAT1: " + strData1 + "/DAT2: " + strData2
    Select strCMD
        gaaaaanz viele Case
    EndSelect
    
    ProcedureReturn ""
EndProcedure
Wenn ich das Debug raus kommentiere, dann funktioniert alles einwandfrei. Aber im Moment funktioniert des auch einwandfrei. Warum das gestern immer zu einem Absturz geführt hat weiss ich auch nicht o_O.