string als rückgabewert aus einer dll empfangen

Anfängerfragen zum Programmieren mit PureBasic.
x_to
Beiträge: 16
Registriert: 24.08.2005 21:20
Kontaktdaten:

string als rückgabewert aus einer dll empfangen

Beitrag von x_to »

ich habe folgendes problem:


ich habe hier eine dll in der eine funktion ist, die mir als ergebnis einen string zurückgibt.

allerdings funktioniert es nicht so wie ich es mir vorgestellt habe:

Code: Alles auswählen

Ergebnis.l = OpenLibrary (0,"C:\CAPSImg.dll") 
Debug ergebnis.l
Ergebnis2.l =IsFunction(0,"CAPSInit")
Debug ergebnis2
Debug PeekS(CallCFunctionFast(0,"CAPSInit"),255)
CloseLibrary(1)
in der dokumentation steht, daß der rückgabewert ein SDWORD ist und als rückgabe "imgeOK" zurückgibt...

was mache ich falsch..???

DLL: http://www.softpres.org/_media/files:ip ... ache=cache

DOKU: http://www.softpres.org/_media/files:ip ... ache=cache
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Beitrag von HeX0R »

Laut Doku ist imageOK eine Konstante mit Wert 0, wie kommst du denn auf einen String ?
Ausserdem musst du bei CallFunctionFast die Adresse aufrufen, die du bei IsFunction() zurückbekommst.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

und so eine konstruktion

Code: Alles auswählen

PeekS(CallCFunctionFast(
würde nur dann funktionieren, wenn die fastcalled function einen pointer zu einem string zurückgibt.

PS: meinte HeXOr evtl. auch so...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
#NULL
Beiträge: 2235
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

pb4

Code: Alles auswählen

If OpenLibrary (0,"C:\CAPSImg.dll")
  *pF.l =GetFunction(0,"CAPSInit")
  If CallCFunctionFast(*pF,"CAPSInit")=0
    ;...
    Debug "arbeiten"
    ;...
  EndIf
  CloseLibrary(1)
EndIf
pb394

Code: Alles auswählen

If OpenLibrary (0,"C:\CAPSImg.dll")
  *pF.l =IsFunction(0,"CAPSInit")
  If CallCFunctionFast(*pF,"CAPSInit")=0
    ;...
    Debug "arbeiten"
    ;...
  EndIf
  CloseLibrary(1)
EndIf
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Beitrag von HeX0R »

Das stimmt so nicht #NULL, richtig wäre:

Code: Alles auswählen

CallCFunctionFast(*pF)
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Wie ich sehe ist es eine Funktion ohne Parameter

Code: Alles auswählen

Ergebnis = CallFunction(#Library, "CAPSInit")

; oder

*CAPSInit = GetFunction(#Library, "CAPSInit")

Ergebnis = CallFunctionFast(*CAPSInit) 
FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten