Binärdaten bzw. Pointer an C-Stdcall-Funktionen

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
miwe-pos
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 28
Registriert: Mi, 26. Dez 2018 18:13

Binärdaten bzw. Pointer an C-Stdcall-Funktionen

Beitrag von miwe-pos »

Ich habe nichts gefunden um echte Binärdaten in Xbase zu erzeugen und an Funktionen aus C-Stdcall.dll zu übergeben.
Das gleiche gilt für Pointer, die es so (wie in C) in Xbase nicht gibt.

Hat jeder eine Lösung oder Rat?

Das Ganze wird für die Einbindung von TSE in Kassen benötigt.
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: Binärdaten bzw. Pointer an C-Stdcall-Funktionen

Beitrag von ramses »

Deiner Frage ist ein wenig unklar.

Mit XBase++ kannst du problemlos beliebig Daten an Fremd-DLL's übergeben und auch einfache Antworten erhalten. (z.B mit dem EXTERN Befehl)
Wenn du mit wirklichen Memory-Pointer oder Stukturen arbeiten willst / musst ist ot4xb von Pablo Botella siehe xbwin.ch dein (einziger) Helfer. Damit geht dann wirklich alles inkl. Callbacks.
Valar Morghulis

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

Re: Binärdaten bzw. Pointer an C-Stdcall-Funktionen

Beitrag von brandelh »

Binärdaten sind einfach mit chr(xyz) zu erstellen, ein String in Xbase++ kann jedes mögliche Zeichen enthalten.
Binäre Dateien werden mit fopen(), fCreate(), etc. ohne Probleme erzeugt, manipuliert, eingelesen.
Es gibt dafür auch Funktionen die das in einem Zuge machen, ABER NICHT MemoRead() oder MemoWrit() nutzen, da diese den Zeichensatz manipulieren können !

Ansonsten gilt etwas genauere Beschreibungen der Frage können die Antworten verbessern 8)
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: Binärdaten bzw. Pointer an C-Stdcall-Funktionen

Beitrag von Koverhage »

Oder BAP von Xbase++ nutzen.
Davon gibt es auch eine BAP2 von ot4xb
Gruß
Klaus
Benutzeravatar
BJelinek
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 218
Registriert: Sa, 02. Jun 2012 20:57
Wohnort: 73257 Köngen
Hat sich bedankt: 9 Mal
Danksagung erhalten: 3 Mal

Re: Binärdaten bzw. Pointer an C-Stdcall-Funktionen

Beitrag von BJelinek »

Hallo Klaus
ich finde kein BAP in der Hilfe.
Grüße
Bernd

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

Re: Binärdaten bzw. Pointer an C-Stdcall-Funktionen

Beitrag von brandelh »

BAP ist eine DLL, die man nutzen kann um Parameterstrukturen anzulegen, Beispiel:

:arrow: .\XPPW32\source\samples\bap\basics

allerdings gehen Strukturen und API Zugriffe mit ot4xb einfacher und flexibler, mit der 1.90 ist man da sehr eingeschränkt.

Aber nochmal, für das Erstellen von Binärdaten braucht man das nicht, die kann man einfach mit chr() anhängen.
BAP braucht man, wenn man z.B. Pointer etc. in Strukturen unterbringen muss, sieh dir das Beispiel mal an.

Eine genauere Beschreibung des Problems, würde unsere Empfehlung für den besten Weg erleichtern ;-)
Gruß
Hubert
miwe-pos
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 28
Registriert: Mi, 26. Dez 2018 18:13

Re: Binärdaten bzw. Pointer an C-Stdcall-Funktionen

Beitrag von miwe-pos »

Danke an alle!
Bin noch nicht zum ausprobieren gekommen.
Der Hinweis mit CHR() erzeugt aber wieder einen String und die DLL will als Übergabe keinen String sondern das klassische
Binärformat unter C.
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: Binärdaten bzw. Pointer an C-Stdcall-Funktionen

Beitrag von ramses »

miwe-pos hat geschrieben: Sa, 08. Feb 2020 9:47 Der Hinweis mit CHR() erzeugt aber wieder einen String und die DLL will als Übergabe keinen String sondern das klassische
Binärformat unter C.
Da liegt du aber völlig falsch!
Chr() erzeugt keinen String sondern genau ein Byte in dem der angegebene Wert Binär Codiert ist. Chr(32) ergibt ein Leerzeichen oder eben Binär 00100000

Mit einer genaueren Beschreibung deines Problems / Aufgabe würdest du sicherlich genauere Angaben zur Lösung erhalten. Denn DLL Aufrufe gehören für viele hier zum Alltag .........
Valar Morghulis

Gruss Carlo
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Binärdaten bzw. Pointer an C-Stdcall-Funktionen

Beitrag von AUGE_OHR »

miwe-pos hat geschrieben: Mi, 05. Feb 2020 17:03 Ich habe nichts gefunden um echte Binärdaten in Xbase zu erzeugen und an Funktionen aus C-Stdcall.dll zu übergeben.
Das gleiche gilt für Pointer, die es so (wie in C) in Xbase nicht gibt.

Das Ganze wird für die Einbindung von TSE in Kassen benötigt.
meinst du eine Bitmap als Binär Datei :?:
wenn ja PDR 6009
gruss by OHR
Jimmy
miwe-pos
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 28
Registriert: Mi, 26. Dez 2018 18:13

Re: Binärdaten bzw. Pointer an C-Stdcall-Funktionen

Beitrag von miwe-pos »

Danke an alle!
Strfile() bei dem ich ja chr(13)+chr(10) nutze, hat mich auf eine falsche Fährte gebracht.
Es geht tatsächlich um verkette Binärdaten. Diese sollen an Funktionen einer stdcall-C-dll mit "EXTERN" übergeben werden.
Welchen Parametertyp ich dabei verwenden soll, (SHORT,USHORT,INTEGER,UINTEGER,INTEGER64,SINGLE,DOUBLE,STRING,
CALLBACK,XPPVALUE), ist mir unklar?!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Binärdaten bzw. Pointer an C-Stdcall-Funktionen

Beitrag von brandelh »

Das dürfte ein StrPointer oder Pointer sein. Im Normalfall reicht es aus, den String in Xbase++ zu erstellen (aus Datei einlesen oder mit chr() oder "ccc" erstellen)
und einfach als parameter anzugeben, der genaue Typ müsste bei der API Definiton angegeben sein, aber so übergibt man einen pointer auf die Binärdaten des Strings.
Zeig doch mal die Definition der API Funktion
Gruß
Hubert
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Binärdaten bzw. Pointer an C-Stdcall-Funktionen

Beitrag von georg »

Hallo, miwe-pos -


hast Du Dir mal die Zeit genommen und Dir das Beispiel von Alaska für die Verwendung von BAP angeschaut? Hier war der Verweis: https://www.xbaseforum.de/posting.php?m ... 2#pr132368

Wenn Du mit Xbase++ 2 arbeitest, findest Du die Einträge unter Dokumente\Xbase++

Aus meiner Sicht sollte das Beispiel einige Fragen beantworten.

Dann gibt es noch die Dokumentation, in der bei der Beschreibung von DLLCall() auch beschrieben wird, wie das mit der Umsetzung zwischen den Xbase++ Datentypen und C/C++ ist.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Antworten