delphi - 如何将 OleVariant 转换为派生的 IDispatch?

标签 delphi interface ole

今天我带来了另一个让我头疼的问题,

我确实将一个 DAO 3.6 类型库导入到我的 delphi 7 中,并且我开始看到许多有趣的接口(interface),所以我面临着一个有趣的问题。

每次Fields类出现在另一个类的属性上时,它们都有正确的定义,我的意思是,他被定义为Fields,但是在Index类中,在他描述其结构的所有字段参与者的部分中,属性字段出现不作为字段,但作为 OleVariant。

查看与 TableDefs 的区别,它具有 Fields 属性并与 Index 定义进行比较:

_TableDef = interface(_DAO)
...
property Fields: Fields read Get_Fields;
...
end;

_Index = interface(_DAO)
...
property Fields: OleVariant read Get_Fields write Set_Fields;
...
end;

问题是,有没有办法将看起来像 OleVariant 类型的字段转换为字段接口(interface)类型?

我非常感谢 StackOverflow 的所有帮助

最佳答案

如果我正确理解您的问题,您是在问如何将变体转换为 IDispatch .这样做:

IDispatch(V)

在你的情况下,我认为你有另一种类型,Fields源自 IDispatch .你可以像这样捕获它:
IDispatch(V) as Fields

关于delphi - 如何将 OleVariant 转换为派生的 IDispatch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16111060/

相关文章:

Java - can-do 接口(interface)的命名约定,而不是 can-be-done-to

windows - 我应该使用 OLE 剪贴板机制还是标准剪贴板 API?

mysql - 从 ms Access mysql 导出包含图片 (BLOB) 的表

delphi - 读取SVN :externals from working copy

delphi - 求源码 IPv4地址选择器VCL组件

delphi - 免费报告 : how to format If-Then

返回接口(interface)类型的 Java 方法

delphi - 如何正确使用ARC与接口(interface)?

multithreading - TThread 和 COM - "CoInitialize has not been called",尽管在构造函数中调用了 CoInitialize

delphi - 按钮标题中的换行符