Fehler in DLL mit Proceduren

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Fehler in DLL mit Proceduren

Beitrag 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 -_-.
Bild
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Muss das nicht

Code: Alles auswählen

procedure.s
statt
procedure
heißen?
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag 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
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag 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.
Bild
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag 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.
Bild
Antworten