Entwickler-Ecke
Sonstiges (Delphi) - ByteArray in SafeArray kopieren
Matthew144 - Mo 30.05.11 15:34
Titel: ByteArray in SafeArray kopieren
Hallo,
ich habe folgendes Problem: ich habe ein Bild in meinem Speicher (Typ: PByte). Jetzt will ich dieses Bild an eine ActiveX Komponente übergeben. Diese benötigt dafür eine variable vom Typ "OleVariant". Wenn ich einfach nur den Pointer caste, dann kommt so eine Meldung wie: "Error, Input variant have no valid safe array data". Ich muss mein Bild offenbar irgendwie in so eine SafeArray Struktur rüberkopieren. Kann mir einer ein Beispiel geben, wie man so was macht? Bin im Internet leider nicht fündig geworden.
Danke!
Matthias
Aya - Mo 30.05.11 18:07
Es gibt die WinAPI funktion
SAFEARRAYCREATE, damit sollte das gehen :)
Matthew144 - Di 31.05.11 09:04
Hallo Aya und danke für den Tipp,
leider bin ich damit nicht so recht klargekommen. Stattdessenhabe ich einfach folgendes gemacht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| var MyArray: OleVariant; ....
begin ... MyArray := VarArrayCreate([0,OleImageWidth*OleImageHeight-1], varByte); for I := 0 to OleImageHeight*OleImageWidth - 1 do begin MyArray[i] := PByte(Integer(OleImageDataPointer))^; Inc(OleImageDataPointer); end; |
Es funktioniert, aber wie man sich denken kann ist es durch die For-Schleife bei größeren Bildern extrem stark ausgebremst. Ein einfaches "MemCpy" habe ich aber irgendwie nicht hingekriegt.
Weiß jemand einen Rat?
Danke!
Moderiert von
Martok: Delphi-Tags hinzugefügt
Matthew144 - Di 31.05.11 09:58
Hallo,
hab irgendwo im Netz eine Lösung gefunden. Es sieht ungefähr so aus:
PMyTarget := VarArrayLock(MyArray);
try
move(PByte(Integer(OleImageDataPointer))^, PMyTarget^, OleImageWidth*OleImageHeight);
finally
VarArrayUnlock(MyArray);
end;
Und es funktioniert!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!