我收到了一个存储在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。
提前致谢。
答案 0 :(得分:2)
我已经多次使用来自变体的普通IUnknown强制转换,然后使用 as 运算符,这很像:
VCLConnection.ConnectionObject:=(IUnknown(NativeConnection) as _Connection);
(我注意到ConnectionObject属性的类型为_Connection,它是在ADOInt单元中定义的。) 当然,你仍然会在无效指针或无指针或任何对基本接口调用没有正确响应的东西(QueryInterface等)上获得AV