Binärdaten bzw. Pointer an C-Stdcall-Funktionen
Moderator: Moderatoren
Binärdaten bzw. Pointer an C-Stdcall-Funktionen
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.
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.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- 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
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.
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
Gruss Carlo
- brandelh
- Foren-Moderator
- Beiträge: 15707
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 71 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Binärdaten bzw. Pointer an C-Stdcall-Funktionen
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
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
Gruß
Hubert
Hubert
- Koverhage
- Der Entwickler von "Deep Thought"
- Beiträge: 2471
- Registriert: Fr, 23. Dez 2005 8:00
- Wohnort: Aalen
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Binärdaten bzw. Pointer an C-Stdcall-Funktionen
Oder BAP von Xbase++ nutzen.
Davon gibt es auch eine BAP2 von ot4xb
Davon gibt es auch eine BAP2 von ot4xb
Gruß
Klaus
Klaus
- BJelinek
- Rekursionen-Architekt
- Beiträge: 221
- Registriert: Sa, 02. Jun 2012 20:57
- Wohnort: 73257 Köngen
- Hat sich bedankt: 10 Mal
- Danksagung erhalten: 3 Mal
Re: Binärdaten bzw. Pointer an C-Stdcall-Funktionen
Hallo Klaus
ich finde kein BAP in der Hilfe.
ich finde kein BAP in der Hilfe.
Grüße
Bernd
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Bernd
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15707
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 71 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Binärdaten bzw. Pointer an C-Stdcall-Funktionen
BAP ist eine DLL, die man nutzen kann um Parameterstrukturen anzulegen, Beispiel:
.\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
.\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
Hubert
Re: Binärdaten bzw. Pointer an C-Stdcall-Funktionen
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.
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.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- 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
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
Gruss Carlo
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Binärdaten bzw. Pointer an C-Stdcall-Funktionen
meinst du eine Bitmap als Binär Datei
wenn ja PDR 6009
gruss by OHR
Jimmy
Jimmy
Re: Binärdaten bzw. Pointer an C-Stdcall-Funktionen
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?!
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?!
- brandelh
- Foren-Moderator
- Beiträge: 15707
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 71 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Binärdaten bzw. Pointer an C-Stdcall-Funktionen
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
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
Hubert
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2832
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 98 Mal
- Danksagung erhalten: 13 Mal
Re: Binärdaten bzw. Pointer an C-Stdcall-Funktionen
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.
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.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.