Seite 1 von 1

DLLCALL() gibt LONG statt String zurück Pointer ?

Verfasst: Sa, 13. Mär 2010 3:02
von brandelh
Hallo,

ich bin dabei die Powerbasic include Datei auf Xbase++ umzuschreiben.
Dabei stoße ich wieder auf das Problem was ich schon einmal mit dem Rückgabetyp String hatte:

PowerBasic:

Code: Alles auswählen

DECLARE FUNCTION iSEDLibraryVersion LIB "iSEDQuickPDF.DLL" ALIAS "iSEDLibraryVersion" () AS STRING

? iSEDLibraryVersion() -> "5.11"
Die Funktion gibt also direkt einen String zurück - in PowerBasic, nicht aber in Xbase++ !
Xbase++ erhält eine lange Integerzahl (vermutlich ein Pointer = LONG):

Code: Alles auswählen

FUNCTION iSEDLibraryVersion() // as String
   LOCAL nDll, cReturn
   nDll:=DllLoad("iSEDQuickPDF.dll")
   if nDLL > 0
      cReturn := DllCall(nDll,DLL_STDCALL,"iSEDLibraryVersion")
      DllUnLoad(nDll)
   else
      ? "Fehler beim DLL laden"
      cReturn := ""
   endif
RETURN cReturn
Natürlich gibt die DLL immer das Gleiche zurück, nur PowerBasic wandelt es direkt um.
Wie kann ich in Xbase++ den String an der Adresse cReturn auslesen ?

Die BIN2 Funktionen scheinen ja nicht zu passen oder ?

Ich denke dass iSEDQuickPDF.DLL eine Delphi DLL ist.

Re: DLLCALL() gibt LONG statt String zurück Pointer ?

Verfasst: Sa, 13. Mär 2010 8:53
von Günter Beyes
Hallo Hubert,

probiere mal StringOf() aus BAP.dll.

Gruß
Günter

Re: DLLCALL() gibt LONG statt String zurück Pointer ?

Verfasst: Sa, 13. Mär 2010 9:41
von brandelh
Hi,

danke, offensichtlich wurde das wohl bei den BIN Funktionen vergessen ... StringOf() aus BAP.dll klingt dem Namen nach richtig :-)

und ich hatte vergessen, dass die ot4xb auch dafür Funktionen haben ;-)

Re: DLLCALL() gibt LONG statt String zurück Pointer ?

Verfasst: Sa, 13. Mär 2010 9:56
von brandelh
Günter Beyes hat geschrieben:probiere mal StringOf() aus BAP.dll.
genau das war es ... super :-)

Re: DLLCALL() gibt LONG statt String zurück Pointer ?

Verfasst: Sa, 13. Mär 2010 10:08
von Koverhage
Hallo Hubert,

würde aber ot4xb bzw. bap2 verwenden, da das Original von Alaska wohl manchmal Probleme
mit der Speicherverwaltung hat.

Re: DLLCALL() gibt LONG statt String zurück Pointer ?

Verfasst: Sa, 13. Mär 2010 16:21
von brandelh
Hallo,

laut doku kann man die Parameter per Copy oder per Referenz (Gefahr für den GC) übergeben...
hast du eine Quelle für die BAB2.DLL ? Bei Alaskas download habe ich nichts gefunden ...
Eigentlich sollte ich ja Pablos OT4XB den Vorzug geben ... :wink:

wenn man überlegt wegen eines vergessenen Befehls (die BIN... sind ja auch da) noch eine DLL und noch eine DLL ...

Re: DLLCALL() gibt LONG statt String zurück Pointer ?

Verfasst: So, 14. Mär 2010 9:56
von Koverhage
Hallo Hubert,

Pablo hat Dir doch den Wrapper für Quick PDF geschickt ?
Die BAP2 kommt glaube ich auch von Pablo und dürfte mittlerweile in
Ot4Xb enthalten sein.

Klaus

Re: DLLCALL() gibt LONG statt String zurück Pointer ?

Verfasst: So, 14. Mär 2010 9:58
von Koverhage
hier weitere, es kann wohl immer nur ein File hochgeladen werden

Re: DLLCALL() gibt LONG statt String zurück Pointer ?

Verfasst: So, 14. Mär 2010 10:07
von Koverhage
hscheint nmicht zu funktionieren, deshalb hier alles in Zip Datei

Re: DLLCALL() gibt LONG statt String zurück Pointer ?

Verfasst: So, 14. Mär 2010 10:30
von brandelh
Koverhage hat geschrieben:Hallo Hubert,
Pablo hat Dir doch den Wrapper für Quick PDF geschickt ?
Die BAP2 kommt glaube ich auch von Pablo und dürfte mittlerweile in Ot4Xb enthalten sein.
Klaus
ähmm... und woher weißt du das ?
wurde mein eMail-Konto gehackt ... :wink:

mit PeekStr() aus der ot4xb geht es auch.

Ich möchte eine Klasse erstellen, die ich auch aus meinem HBPrinter heraus nutzen kann.
Wenn das soweit funktioniert, kann ich durch einfachen Austausch der Basisklasse
meinen bestehenden Quellcode von HBPrinter Ausdrucken 1:1 auch für direkten PDF-Druck nutzen.
Das wird aber noch dauern ;-)
Außerdem muss die Basisfunktionalität bei mir auch kompatibel zu der von PowerBasic bleiben ... ;-)

Die Basisfunktionen sind auf jeden Fall einfach umzusetzen, nachdem das mit dem String geklärt ist.

Re: DLLCALL() gibt LONG statt String zurück Pointer ?

Verfasst: So, 14. Mär 2010 10:42
von brandelh
Koverhage hat geschrieben:hier weitere, es kann wohl immer nur ein File hochgeladen werden
Hallo Klaus,

du kannst jeweils 1 Datei zum Anhängen auswählen, aber dann kommt unten wieder eine "Upload" Anzeige für eine weitere Datei. Somit kannst du mehrere Dateien anhängen, bevor du endgültig "Absenden" drückst.

Re: DLLCALL() gibt LONG statt String zurück Pointer ?

Verfasst: So, 14. Mär 2010 10:51
von Martin Altmann
Moin,
brandelh hat geschrieben:ähmm... und woher weißt du das ?
hat doch Pablo in der Alaska-Newsgroup geschrieben... 8)

Viele Grüße,
Martin

Re: DLLCALL() gibt LONG statt String zurück Pointer ?

Verfasst: So, 14. Mär 2010 11:03
von brandelh
Hi,

das habe ich jetzt auch gelesen ... war nur im ersten Moment verblüfft :D