有没有办法在OleVariant中传递包装并解包TObject后代?我试图跨自动化对象传递一个TObject。我知道这不是一个好主意,但我没有一个好的选择。
该对象将在同一自动化dll的对象之间传递,如果有任何区别的话。
像这样:
function GetMyObjAsVariant;
var
MyObj: TMyObj;
begin
MyObj := TMyObj.Create;
result := OleVariant(MyObj);
end;
客户将其用作
var
MyObj: TMyObj;
begin
MyObj := GetMyObjAsVariant as TMyObj;
end;
编译失败,返回
E2015 Operator not applicable to this operand type.
最佳答案
如果您确实要这样做,并且可以确定两个对象都在同一进程中,则可以将任何TObject强制转换为Integer,然后再强制转换为TObject:
function GetMyObjAsVariant;
var
MyObj: TMyObj;
begin
MyObj := TMyObj.Create;
result := OleVariant(Integer(MyObj));
end;
然后:
var
anInt: Integer;
MyObj: TMyObj;
begin
anInt := GetMyObjAsVariant;
MyObj := TMyObj(anInt);
end;