Byte array

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
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

Beitrag von Wolfgang Ciriack »

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 ?
Viele Grüße
Wolfgang
Benutzeravatar
brandelh
Foren-Moderator
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

Beitrag von brandelh »

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.
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
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

Beitrag von Martin Altmann »

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
: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
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
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

Beitrag von Wolfgang Ciriack »

@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 ?
Viele Grüße
Wolfgang
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
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

Beitrag von Wolfgang Ciriack »

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
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
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

Beitrag von Tom »

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.

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
   ```
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.

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
   ```
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.

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)
   ```
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.
Herzlich,
Tom
Benutzeravatar
ssemleit
Rekursionen-Architekt
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

Beitrag von ssemleit »

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?!
Gruß
Stefan
Benutzeravatar
brandelh
Foren-Moderator
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

Beitrag von brandelh »

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.
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
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

Beitrag von Martin Altmann »

Hubert,
für Zeiger auf Zeiger brauchst Du ja BAP - darum mein Hinweis.

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
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
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

Beitrag von Wolfgang Ciriack »

Na da habe ich ja einiges zum Testen. Danke vorerst.
Viele Grüße
Wolfgang
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
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

Beitrag von Wolfgang Ciriack »

Hm, hat bisher alles nicht funktioniert.
Auch der Vorschlag von Alaska mit

Code: Alles auswählen

buff := VTType():new( 0, VT_UI1+VT_BYREF )
if oPDF:ExtractEmbeddedFile(0, @buff) == 0 
hat den Fehler "Falscher Parameter" zur Folge.
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)
und ein Link zur Beschreibung/Beispiel in verschiedenen Programmiersprachen:
https://www.gdpicture.com/guides/gdpict ... dFile.html
Viele Grüße
Wolfgang
Benutzeravatar
AUGE_OHR
Marvin
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

Beitrag von AUGE_OHR »

hi Wolfgang,

was hast du genau vor ?
gruss by OHR
Jimmy
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
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

Beitrag von Wolfgang Ciriack »

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.
Viele Grüße
Wolfgang
Benutzeravatar
AUGE_OHR
Marvin
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

Beitrag von AUGE_OHR »

hi Wolfgang,
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.
ich frage mich was wohl ExtractEmbeddedFile macht.
ist in dem PDF was "eingebettet", wie ein Bild, was du extrahieren möchtest ?
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
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

Beitrag von Jan »

Hallo Wolfgang,

ZUGFeRD?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
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

Beitrag von Wolfgang Ciriack »

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
Benutzeravatar
mikehoffmann
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 136
Registriert: Mo, 21. Sep 2015 16:22
Hat sich bedankt: 1 Mal
Danksagung erhalten: 19 Mal

Re: Byte array

Beitrag von mikehoffmann »

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.
Benutzeravatar
Jan
Marvin
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

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
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

Beitrag von Wolfgang Ciriack »

Hallo Jan,
muss ich mir mal ansehen, was die Klasse alles kann. Evtl. ersetze ich dann das teure GdPicture komplett.
Viele Grüße
Wolfgang
Antworten