Byte array
Moderator: Moderatoren
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2950
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Byte array
Hallo,
ich muss einer ActiveX Funktion eine Variable vom Typ byte array per Referenz übergeben:
Ich habe das probiert mit Variable buff:
s := 1000
buff := Space(s + 1)
oObj:GetFile(0, @buff)
(auch mit Space(s)+Chr(0) probiert)
bekomme aber immer Error "Falscher Parameter"
Wie kann ich also eine Variable vom Typ byte array in xBase++ definieren ?
ich muss einer ActiveX Funktion eine Variable vom Typ byte array per Referenz übergeben:
Ich habe das probiert mit Variable buff:
s := 1000
buff := Space(s + 1)
oObj:GetFile(0, @buff)
(auch mit Space(s)+Chr(0) probiert)
bekomme aber immer Error "Falscher Parameter"
Wie kann ich also eine Variable vom Typ byte array in xBase++ definieren ?
Viele Grüße
Wolfgang
Wolfgang
- brandelh
- Foren-Moderator
- Beiträge: 15710
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 73 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Byte array
was ist das für ein oObj ?
getfile() aus der api ?
ein ByteArray in C entspricht nach meiner Erinnerung einem String, den man per Referenz übergibt.
Bei ActiveX habe ich aber nur String oder StringZ Parameter gesehen.
getfile() aus der api ?
ein ByteArray in C entspricht nach meiner Erinnerung einem String, den man per Referenz übergibt.
Bei ActiveX habe ich aber nur String oder StringZ Parameter gesehen.
Gruß
Hubert
Hubert
- Martin Altmann
- Foren-Administrator
- Beiträge: 16586
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 116 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Byte array
Musst du nicht die Adresse des Arrays per Referenz übergeben? War dafür nicht BAP gedacht (oder wie hieß die Erweiterung)?
Viele Grüße
Martin
Viele Grüße
Martin
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.
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2950
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Byte array
@Hubert,
nein, das ist eine Funktion aus GdPicture, der Name ist hier nur von mir so gewählt.
@Martin,
ja, das muss die Adresse des Memory-Bereichs sein, die per Referenz übergeben werden soll.
Gibt es denn irgendwo noch eine Beschreibung von BAP ?
nein, das ist eine Funktion aus GdPicture, der Name ist hier nur von mir so gewählt.
@Martin,
ja, das muss die Adresse des Memory-Bereichs sein, die per Referenz übergeben werden soll.
Gibt es denn irgendwo noch eine Beschreibung von BAP ?
Viele Grüße
Wolfgang
Wolfgang
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2950
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Byte array
Mit Bap probiert, keinen Erfolg. Ich denke aber auch, das Bap nur für eine Strukturübermittlung an eine DLL-Funktion da ist.
Viele Grüße
Wolfgang
Wolfgang
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 105 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: Byte array
Das hier sagt ChatGPT zum Thema:
Um aus einem Xbase++-Programm ein Byte-Array an eine ActiveX-Komponente zu übergeben, müssen Sie mehrere Schritte befolgen, da Xbase++ und ActiveX unterschiedliche Datenstrukturen verwenden. Hier ist ein detaillierter Ablauf, wie Sie das Byte-Array vorbereiten und an die ActiveX-Komponente übergeben können:
1. **Byte-Array in Xbase++ erstellen:**
Erstellen Sie ein Byte-Array in Xbase++ und füllen Sie es mit den benötigten Daten.
2. **Byte-Array in einen String konvertieren:**
Da ActiveX-Komponenten oft Strings oder andere COM-kompatible Typen erwarten, müssen Sie das Byte-Array in ein entsprechendes Format konvertieren. Ein üblicher Ansatz ist die Konvertierung des Byte-Arrays in einen String.
3. **ActiveX-Komponente instanziieren und Methode aufrufen:**
Instanziieren Sie die ActiveX-Komponente und rufen Sie die entsprechende Methode auf, um das Byte-Array (in String-Form) zu übergeben.
4. **Dekodieren des Strings in der ActiveX-Komponente:**
Stellen Sie sicher, dass die ActiveX-Komponente den empfangenen String korrekt dekodiert, um wieder das ursprüngliche Byte-Array zu erhalten.
Dies ist ein einfaches Beispiel. In der Praxis können weitere Schritte erforderlich sein, z.B. Fehlerbehandlung, besondere Kodierungsanforderungen oder die Anpassung an spezifische Anforderungen der verwendeten ActiveX-Komponente. Wenn Ihre ActiveX-Komponente ein anderes Format erwartet, müssen Sie sicherstellen, dass die Daten entsprechend kodiert und dekodiert werden.
Um aus einem Xbase++-Programm ein Byte-Array an eine ActiveX-Komponente zu übergeben, müssen Sie mehrere Schritte befolgen, da Xbase++ und ActiveX unterschiedliche Datenstrukturen verwenden. Hier ist ein detaillierter Ablauf, wie Sie das Byte-Array vorbereiten und an die ActiveX-Komponente übergeben können:
1. **Byte-Array in Xbase++ erstellen:**
Erstellen Sie ein Byte-Array in Xbase++ und füllen Sie es mit den benötigten Daten.
Code: Alles auswählen
```xbase
FUNCTION CreateByteArray()
LOCAL aBytes := {}
LOCAL i, nSize := 10 // Beispielgröße des Arrays
FOR i := 1 TO nSize
AADD(aBytes, BITAND(i, 0xFF)) // Fügen Sie Bytes zum Array hinzu
NEXT
RETURN aBytes
```
Da ActiveX-Komponenten oft Strings oder andere COM-kompatible Typen erwarten, müssen Sie das Byte-Array in ein entsprechendes Format konvertieren. Ein üblicher Ansatz ist die Konvertierung des Byte-Arrays in einen String.
Code: Alles auswählen
```xbase
FUNCTION ByteArrayToString(aBytes)
LOCAL cString := ""
LOCAL i
FOR i := 1 TO LEN(aBytes)
cString := cString + CHR(aBytes[i])
NEXT
RETURN cString
```
Instanziieren Sie die ActiveX-Komponente und rufen Sie die entsprechende Methode auf, um das Byte-Array (in String-Form) zu übergeben.
Code: Alles auswählen
```xbase
FUNCTION CallActiveXMethod()
LOCAL oActiveX
LOCAL aBytes := CreateByteArray()
LOCAL cByteString := ByteArrayToString(aBytes)
// ActiveX-Komponente instanziieren
oActiveX := CREATEOBJECT("YourActiveX.Component")
// Methode der ActiveX-Komponente aufrufen und Byte-Array als String übergeben
oActiveX.YourMethod(cByteString)
```
Stellen Sie sicher, dass die ActiveX-Komponente den empfangenen String korrekt dekodiert, um wieder das ursprüngliche Byte-Array zu erhalten.
Dies ist ein einfaches Beispiel. In der Praxis können weitere Schritte erforderlich sein, z.B. Fehlerbehandlung, besondere Kodierungsanforderungen oder die Anpassung an spezifische Anforderungen der verwendeten ActiveX-Komponente. Wenn Ihre ActiveX-Komponente ein anderes Format erwartet, müssen Sie sicherstellen, dass die Daten entsprechend kodiert und dekodiert werden.
Herzlich,
Tom
Tom
- ssemleit
- Rekursionen-Architekt
- Beiträge: 143
- Registriert: Di, 08. Mär 2016 11:32
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 14 Mal
Re: Byte array
Hallo,
in den Untiefen unseres Codes habe ich die Anwendung einer wohl undokumentierten Alaska Funktion AutomationBinaryString() gefunden,
mit der ein Parameter für eine ActiveX-Kompenente aufbereitet wird.
Beispiel:
::loadFromMemory(AutomationBinaryString(cText + Chr(0)), nFormat, lCurSelection)
Eventuell klappt es damit?!
in den Untiefen unseres Codes habe ich die Anwendung einer wohl undokumentierten Alaska Funktion AutomationBinaryString() gefunden,
mit der ein Parameter für eine ActiveX-Kompenente aufbereitet wird.
Beispiel:
::loadFromMemory(AutomationBinaryString(cText + Chr(0)), nFormat, lCurSelection)
Eventuell klappt es damit?!
Gruß
Stefan
Stefan
- brandelh
- Foren-Moderator
- Beiträge: 15710
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 73 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Byte array
Ich kann mich nur wiederholen, ein Byte Array ist in Xbase und PowerBasic ein einfacher String, allerdings darf der natürlich nie einer Zeichensatzkonvertierung unterworfen werden.
Bei PowerBasic muss dieser "normale" String (dort WideString) in eine VARIANT übersetzt werden.
Dieser Datentyp wird vermutlich von der Xbase++ Funktion auch erzeugt, während bei Excel einfach ein String angegeben werden kann,
der möglicherweise direkt in VARIANT umgesetzt wird, aber mit Zeichensatzkonvertierungen ...
Ich denke es liegt aber eher daran, dass man einen Zeiger auf einen Zeiger erwartet - ActiveX mit Excel kommt ja auch gut mit der Automatik zurecht.
Mehr Info aus der Doku der Funktion wäre nicht schlecht.
Bei PowerBasic muss dieser "normale" String (dort WideString) in eine VARIANT übersetzt werden.
Dieser Datentyp wird vermutlich von der Xbase++ Funktion auch erzeugt, während bei Excel einfach ein String angegeben werden kann,
der möglicherweise direkt in VARIANT umgesetzt wird, aber mit Zeichensatzkonvertierungen ...
Ich denke es liegt aber eher daran, dass man einen Zeiger auf einen Zeiger erwartet - ActiveX mit Excel kommt ja auch gut mit der Automatik zurecht.
Mehr Info aus der Doku der Funktion wäre nicht schlecht.
Gruß
Hubert
Hubert
- Martin Altmann
- Foren-Administrator
- Beiträge: 16586
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 116 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Byte array
Hubert,
für Zeiger auf Zeiger brauchst Du ja BAP - darum mein Hinweis.
Viele Grüße
Martin
für Zeiger auf Zeiger brauchst Du ja BAP - darum mein Hinweis.
Viele Grüße
Martin
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.
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2950
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2950
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Byte array
Hm, hat bisher alles nicht funktioniert.
Auch der Vorschlag von Alaska mithat den Fehler "Falscher Parameter" zur Folge.
Hier nochmal die Info, wie das in VB.Net aussieht:und ein Link zur Beschreibung/Beispiel in verschiedenen Programmiersprachen:
https://www.gdpicture.com/guides/gdpict ... dFile.html
Auch der Vorschlag von Alaska mit
Code: Alles auswählen
buff := VTType():new( 0, VT_UI1+VT_BYREF )
if oPDF:ExtractEmbeddedFile(0, @buff) == 0
Hier nochmal die Info, wie das in VB.Net aussieht:
Code: Alles auswählen
Dim FileData As Byte() = New Byte(FileSize) {}
Dim status As GdPictureStatus = gdpicturePDF.ExtractEmbeddedFile(0, FileData)
https://www.gdpicture.com/guides/gdpict ... dFile.html
Viele Grüße
Wolfgang
Wolfgang
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2950
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Byte array
Hallo Jimmi,
ich möchte nur an diese Funktion oPDF:ExtractEmbeddedFile eine Variable vom typ byte array übergeben können.
Alle Versuche sind bisher gescheitert.
Vielleicht kann man da mit ot4xb was hinbekommen ?
Ich warte jetzt erst einmal ab, ob der Alaska Siupport das hinbekommt.
ich möchte nur an diese Funktion oPDF:ExtractEmbeddedFile eine Variable vom typ byte array übergeben können.
Alle Versuche sind bisher gescheitert.
Vielleicht kann man da mit ot4xb was hinbekommen ?
Ich warte jetzt erst einmal ab, ob der Alaska Siupport das hinbekommt.
Viele Grüße
Wolfgang
Wolfgang
- 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: Byte array
hi Wolfgang,
ist in dem PDF was "eingebettet", wie ein Bild, was du extrahieren möchtest ?
ich frage mich was wohl ExtractEmbeddedFile macht.Wolfgang Ciriack hat geschrieben: ↑Do, 23. Mai 2024 18:51 ich möchte nur an diese Funktion oPDF:ExtractEmbeddedFile eine Variable vom typ byte array übergeben können.
ist in dem PDF was "eingebettet", wie ein Bild, was du extrahieren möchtest ?
gruss by OHR
Jimmy
Jimmy
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Byte array
Hallo Wolfgang,
ZUGFeRD?
Jan
ZUGFeRD?
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2950
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Byte array
Ja, bei elektronischen Rechnungen kann ja die entsprechende xml-Datei (ubl- oder cii-Format) in eine PDF-Datei als Anhang eingefügt sein.
Viele Grüße
Wolfgang
Wolfgang
- mikehoffmann
- Rekursionen-Architekt
- Beiträge: 136
- Registriert: Mo, 21. Sep 2015 16:22
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 19 Mal
Re: Byte array
Ich würde mich zu der Aussage hinreißen lassen, dass der Typ des VARIANTARGs (VT_BYREF|VT_VECTOR|VT_UI1) (oder vielleicht auch (VT_BYREF|VT-VECTOR|VT_I1)) sein müsste.
Fragt sich nur, ob Xbase++ diesen Typ anbietet und marshallen kann.
Fragt sich nur, ob Xbase++ diesen Typ anbietet und marshallen kann.
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Byte array
Wolfgang,
ich benutze für die Erstellung von PDF ja die Klasse von Edgar. Und die kann mit der aktuellen Version schon seit ein paar Jahren mit eingebetteten Dateien umgehen. Sowohl reinschreiben als auch auslesen. Vielleicht wäre es ja die Ausgabe wert, bevor Du da noch endlose Stunden mit verbringst?
Jan
ich benutze für die Erstellung von PDF ja die Klasse von Edgar. Und die kann mit der aktuellen Version schon seit ein paar Jahren mit eingebetteten Dateien umgehen. Sowohl reinschreiben als auch auslesen. Vielleicht wäre es ja die Ausgabe wert, bevor Du da noch endlose Stunden mit verbringst?
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2950
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Byte array
Hallo Jan,
muss ich mir mal ansehen, was die Klasse alles kann. Evtl. ersetze ich dann das teure GdPicture komplett.
muss ich mir mal ansehen, was die Klasse alles kann. Evtl. ersetze ich dann das teure GdPicture komplett.
Viele Grüße
Wolfgang
Wolfgang