Hallo,
ich habe nun fogendes herausbekommen:
der
OLE-server erwartet ein Array mit 12 Byte.
Die Schnittstelle lässt nur OleVariant zu: (var ReferenceKey: {NOT_OLEAUTO(PSafeArray)}OleVariant; KeyContext: Integer)
der KeyContext ist in diesem Kontext egal.
Ich will jetz ein OleVariant bauen das das 12 Byte array enthält:
Delphi-Quellcode:
function test:OleVariant;
var i: integer;
Pb: Pointer;
Vb: OleVariant;
b: TBytes;
tsa: TSafeArray;
psa: PSafeArray;
tag: TSafeArrayBound;
P: Pointer;
V: OleVariant;
begin
SetLength(b,12); for i:=0 to 11 do b[i]:=0;
Vb:= VarArrayCreate([0, 12], varByte);
Pb:= VarArrayLock(Vb);
Move(b[0], Pb^, 12);
VarArrayUnlock(Vb);
tsa.cDims:= 1;
tsa.fFeatures:= 0001; // <-??
tsa.cbElements:= 12;
tsa.cLocks:= 0001; // <-??
tsa.pvData:= Pb; ;
tag.lLbound:= 0;
tag.cElements:= 12;
tsa.rgsabound[0]:=tag;
psa:= @tsa;
V:= VarArrayCreate([0,0], varDispatch); // nicht: varVariant,varDispatch
P:= VarArrayLock(V);
Move(psa, P^, SizeOf(psa));
VarArrayUnlock(V);
Result:= V;
end;
wenn ich das nun Aufrufe:
MS.Item[1].GetReferenceKey(test, 0);
erhalte ich als Fehlermeldung nicht mehr "Typenkonflikt" sondern
"Variante oder sicheres Array ist gesperrt"
(Zumindest wird die OleVariant mal akzeptiert)
Weiß jemand Rat?
tsa.fFeatures
tsa.cLocks