有没有办法在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;

10-07 18:31