Schwieriges Thema. Bin noch nicht erfahren genug dafür, aber wie wäre es mit folgender Idee:
Delphi-Quellcode:
type
TMyStruct = record
Val_1 : Integer;
Val_2 : Extended;
end;
Delphi-Quellcode:
protected
procedure Get_MyArray(var Data : OleVariant); safecall;
Delphi-Quellcode:
procedure TA0001.Get_MyArray(var Data: OleVariant);
var
MStream : TMemoryStream;
Address : Pointer;
MyStruct : TMyStruct;
begin
MStream := TMemoryStream.Create;
try
//Vorbereiten
MyStruct.Val_1 := Random(100);
MyStruct.Val_2 := Random();
MStream.SetSize(SizeOf(TMyStruct));
MStream.Position := 0;
MStream.Write(MyStruct,SizeOf(TMyStruct));
//VariantArray
Data := VarArrayCreate([0,MStream.Size-1],varByte);
Address := VarArrayLock(Data);
MStream.Position := 0;
MStream.Read(Address^,MStream.Size);
finally
VarArrayUnlock(Data);
MStream.Free;
end;
end;
Beim Aufruf muss man dann Data als ByteArray betrachten und das dann auf die Struktur von TMyStruct abbilden:
D.h. Val_1 steckt in den ersten 4 bytes und Val_2 in den übrigen (Achtung 32bit (10byte) unterscheidet sich von 64bit (8byte) ).
http://docwiki.embarcadero.com/RADSt...Einfache_Typen
Schreiben sollte auch in der Art (Die Arrays als
EIN ByteArray an dein
ActiveX Element übergeben) möglich sein. Deine Schnittstelle muss dann nur die Größe des ByteArrays auswerten ( durch die Größe eines Records teilen) und die Anzahl in ein RecordArray schreiben. Habe das selber benutzt um ein Bitmap mit 25 MByte prozessübergreifend zu übertragen (one way server to client). Das ging zumindest sehr flott.
Folgender Link könnte dir noch hilfreich sein:
http://delphi.about.com/library/weekly/aa122104a.htm
Schreib auch bitte ob das funzt. Bei mir kompiliert es zumindest schon mal
Grüße!
Chris