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