COMatePlus Variant Buffer Problem [ERLEDIGT]

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Imhotheb
Beiträge: 192
Registriert: 10.10.2014 13:14
Computerausstattung: Intel 8086, 640 KB RAM, Hercules Video Adapter, 2 x 5 1/4" 360kb Floppy, MS-DOS 3
Wohnort: Wolfenbüttel

COMatePlus Variant Buffer Problem [ERLEDIGT]

Beitrag von Imhotheb »

Hallo Zusammen,

ich versuche mich gerade an COMatePlus. Einiges habe ich zum laufen bekommen, jedoch habe ich ein Verständnisproblem.
Einen lauffähigen Code zu posten ist schwierig, hoffe jedoch ihr könnt mir auch so weiterhelfen.

Folgendes sei gegeben:
OpenStream(Buffer: VARIANT)
Reads a file from a buffer (vs. from a file or URL). This is useful if you intend to manage the binary data yourself. The VARIANT must be a “byte array” filled with the binary data of the file. Returns TRUE if the file was read from the buffer correctly. FALSE if the buffer is invalid.
Wenn ich es richtig verstanden habe, sollte es so aussehen:

Code: Alles auswählen

Define.COMateObject com
com = COMate_CreateObject("COM_BlaBlubb_Init")
Define *Buffer = ?TestFile

com\GetIntegerProperty("OpenStream(" + Str(*Buffer) + " AS VARIANT BYREF)") ; geht nicht
com\GetIntegerProperty("OpenStream(" + Str(*Buffer) + " BYREF)")						; geht nicht
com\GetIntegerProperty("OpenStream(" + Str(*Buffer) + ")")									; geht nicht

DataSection
	TestFile:
	IncludeBinary "TestFile"
        ;Data.b $00      ; Nur zum testen
EndDataSection
Wenn ich "TestFile" über ein andere Methode lade bekomme ich -1 (True) zurück ... mit OpenStream() immer 0 (False). Daran ändert auch die Null in der DataSection nichts.
Bin für jeden Rat dankbar.

Edit: "TestFile" ist eine UTF8-XML
Zuletzt geändert von Imhotheb am 02.04.2019 20:03, insgesamt 1-mal geändert.
weil einfach einfach einfach ist ... mach' ich es anders
Benutzeravatar
Imhotheb
Beiträge: 192
Registriert: 10.10.2014 13:14
Computerausstattung: Intel 8086, 640 KB RAM, Hercules Video Adapter, 2 x 5 1/4" 360kb Floppy, MS-DOS 3
Wohnort: Wolfenbüttel

Re: COMatePlus Variant Buffer Problem

Beitrag von Imhotheb »

Hab die Lösung jetzt doch noch selbst gefunden ... und nebenbei festgestellt das ich den Typ Variant nicht mag :bluescreen:

Folgender fiktiver Code würde funktionieren:

Code: Alles auswählen

Procedure Buffer2Variant(*Buffer, BufferSize)
  Protected *SafeArray.SAFEARRAY, SafeArrayBound.SAFEARRAYBOUND
  Protected *Ret_Variant.VARIANT = AllocateStructure(VARIANT)
  
  If *Ret_Variant And *Buffer And BufferSize > 0
    VariantClear_(*Ret_Variant)
    SafeArrayBound\lLbound = 0
    SafeArrayBound\cElements = BufferSize
    *SafeArray = SafeArrayCreate_(#VT_UI1, 1, SafeArrayBound)
    If *SafeArray
      If SafeArrayLock_(*SafeArray) = #S_OK
        CopyMemory(*Buffer, *SafeArray\pvData, BufferSize)
        *Ret_Variant\vt = #VT_ARRAY|#VT_UI1
        *Ret_Variant\parray = *SafeArray
        SafeArrayUnlock_(*SafeArray)
      EndIf
    EndIf
  EndIf
  
  ProcedureReturn *Ret_Variant
EndProcedure

Define com.COMateObject = COMate_CreateObject("COM_BlaBlubb_Init")
Define *Buffer = Buffer2Variant(?TestFile_Start, ?TestFile_End - ?TestFile_Start)


com\GetIntegerProperty("OpenStream(" + Str(*Buffer) + " AS VARIANT BYREF)")


DataSection
	TestFile_Start:
	IncludeBinary "TestFile"
	TestFile_End:
EndDataSection
weil einfach einfach einfach ist ... mach' ich es anders
Benutzeravatar
mk-soft
Beiträge: 3700
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: COMatePlus Variant Buffer Problem [ERLEDIGT]

Beitrag von mk-soft »

Im Packet vom COMate müsste der VariantHelper_Include noch sein...

Aktuelle Version ist hier...

https://www.purebasic.fr/english/viewto ... 14&t=40150
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Imhotheb
Beiträge: 192
Registriert: 10.10.2014 13:14
Computerausstattung: Intel 8086, 640 KB RAM, Hercules Video Adapter, 2 x 5 1/4" 360kb Floppy, MS-DOS 3
Wohnort: Wolfenbüttel

Re: COMatePlus Variant Buffer Problem [ERLEDIGT]

Beitrag von Imhotheb »

Danke für den Tip ... dadurch bin ich darauf gekommen das dieser "variant" irgendwie anders ist ... allerdings hab ich dann den Überblick verloren und beschlossen diesen Typ nicht zu mögen.
Aber nach etwas schlaf und einem anständigen Kaffee, komm' ich langsam dahinter ... und weiß nun auch die Include zu schätzen :praise: :praise: :praise:
weil einfach einfach einfach ist ... mach' ich es anders
Antworten