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

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

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

Beitrag 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.
Gruß
Hubert
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

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

Beitrag von Günter Beyes »

Hallo Hubert,

probiere mal StringOf() aus BAP.dll.

Gruß
Günter
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

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

Beitrag 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 ;-)
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

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

Beitrag von brandelh »

Günter Beyes hat geschrieben:probiere mal StringOf() aus BAP.dll.
genau das war es ... super :-)
Gruß
Hubert
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

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

Beitrag von Koverhage »

Hallo Hubert,

würde aber ot4xb bzw. bap2 verwenden, da das Original von Alaska wohl manchmal Probleme
mit der Speicherverwaltung hat.
Gruß
Klaus
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

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

Beitrag 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 ...
Gruß
Hubert
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

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

Beitrag 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
Dateianhänge
bap2.ch
(234 Bytes) 207-mal heruntergeladen
Gruß
Klaus
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

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

Beitrag von Koverhage »

hier weitere, es kann wohl immer nur ein File hochgeladen werden
Gruß
Klaus
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

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

Beitrag von Koverhage »

hscheint nmicht zu funktionieren, deshalb hier alles in Zip Datei
Dateianhänge
bap2.zip
(5.78 KiB) 229-mal heruntergeladen
Gruß
Klaus
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

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

Beitrag 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.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

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

Beitrag 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.
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

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

Beitrag 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
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

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

Beitrag von brandelh »

Hi,

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