我收到了存储在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。

提前致谢。

最佳答案

我已经通过使用从变体开始的普通IUnknown强制转换,然后使用as运算符来进行多次此工作,就像这样:

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


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

关于delphi - 如何将Variant转换为TADOConnection.ConnectionObject?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1969953/

10-09 01:10