如何将Variant强制转换为ADO Connection.Connection对象?

时间:2009-12-28 15:21:01

标签: delphi com interface ado

我收到了一个存储在Variant中的本机COM ADOConnection。我想将此连接的接口传递给VCL包装器TADOConnection。问题是我要么获得无效的类型转换编译器消息或访问冲突。

例如:

procedure AssignNativeConnection(VCLConnection: TADOConnection; var NativeConnection: Variant);
var
  VariantManager: TVariantManager;
  AInterface: IInterface;
begin
  AInterface := VCLConnection.ConnectionObject;
  VariantManager.VarToIntf(AInterface, NativeConnection);  //oops AV here!
end;

任何想法如何解决这个问题?我正在使用Delphi 2007。

提前致谢。

1 个答案:

答案 0 :(得分:2)

我已经多次使用来自变体的普通IUnknown强制转换,然后使用 as 运算符,这很像:

VCLConnection.ConnectionObject:=(IUnknown(NativeConnection) as _Connection);

(我注意到ConnectionObject属性的类型为_Connection,它是在ADOInt单元中定义的。) 当然,你仍然会在无效指针或无指针或任何对基本接口调用没有正确响应的东西(QueryInterface等)上获得AV