Stringkonvertierung

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Stringkonvertierung

Beitrag von Jan »

Hallo,

da merke ich mal wieder das mit das Fundament fehlt. Ich muß einen String als Parameter an eine externe dll übergeben. Dummerweise hat dieser String Nullbytes drin. Womit das an diesen Positionen scheitert. Jetzt habe ich den Hinweis bekommen das ich nicht den String übergeben darf, sondern das als "block of bytes" machen muß, um die Nullbytes mit rüber zu bekommen. In der dll-Hilfe heißt es ganz banal nur, das müsse ein ANSIString sein.

Was wäre da jetzt die richtige Konvertierungsfunktion?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied 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: Stringkonvertierung

Beitrag von brandelh »

Ich weiß ja nichts über deine DLL Funktion, aber ein String wird an DLLs als Pointer auf die Daten übergeben, das macht DLLCALL automatisch.
Viele Sprachen nutzen aber ASCIIZ Strings und dann ist das chr(0) Zeichen, die End Of String Markierung, du musst also eher bei den Parametern der DLL etwas einstellen.

API Funktionen z.B. haben häufig eine Längenangabe der übergebenden Daten dabei, wenn man die setzt werden auch chr(0) eingelesen, wenn nicht wird das als Ende der Daten interpretiert.

Xbase++ selbst (ist ja in C geschrieben) kann nur chr(0) im String enthalten und verarbeiten, weil es intern Strings als Array of Bytes ansieht.
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Stringkonvertierung

Beitrag von Jan »

Hallo Hubert,

Danke für die Antwort. Ich steh bei solchen Fragen echt auf dem Schlauch, für mich ist das immer ein Buch mit viel mehr als nur sieben Siegeln.

Der DLLCALL hat als zweiten Parameter ein DLL_CDECL stehen. Was mit allen anderen Fuktionsaufrufen in diese dll auch super funktioniert. Nur hier nicht.

Der betreffende String ist übrigens eine JPG oder BMP.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Stringkonvertierung

Beitrag von ramses »

Hallo Jan
bist du dir wirklich sicher dass du den Bildinhalt selbst und nicht nur den Filenamen als Ansi-String übergeben musst?
(Den Bildinhalt kannst du nicht als Ansi String formatieren.)
Valar Morghulis

Gruss Carlo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Stringkonvertierung

Beitrag von Jan »

Carlo,

ja. Es gibt in diesem Fall überhaupt keine Datei. Und die Funktion, der ich den Dateinamen übergeben müsste, heißt anders. Und funktioniert auch.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Stringkonvertierung

Beitrag von HaPe »

Hallo Jan !

Schreib doch mal den Bitmapstring in ein Array, also jedes Zeichen in ein Array-Element.
Versuch macht klug :wink:
--
Hans-Peter
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: Stringkonvertierung

Beitrag von brandelh »

Ein Xbase String ist schon das was Jan braucht, wenn man z.B. eine BMP direkt in eine Variable lädt,
ist das technisch ein Bytearray (ich meine der Begriff kommt von C die ja keine chr(0) in Strings haben dürfen), aber eben kein Xbase++ Array, das würde nicht funktionieren.

Im PowerBasic übergibt man hier einen Pointer (also LONG), aber nicht auf die Stringvariable, sondern auf den String selbst.

Die Angabe der DLL_CDECL ist vermutlich richtig bei der QuickPDF, da es eine C Bibliothek ist,
Ich selbst nutze ja OT4XB, das kümmert sich selbst um die Aufrufkonvention.
Sicher ist aber, dass diese je DLL immer gleich ist, es geregelt ja die Reihenfolge in der die Parameter intern übergeben werden (die einen von links nach rechts, die andere von rechts nach links).

Tipp, wenn es nicht direkt funktioniert, kannst du die BMP auch mit temporärem Namen speichern und die AddImageFromFile nutzen.
Gruß
Hubert
Antworten