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

use*_*868 1 delphi ole interface

我今天提出另一个问题,这让我很头疼,

我确实将DAO 3.6类型库导入了我的delphi 7,并且开始看到许多有趣的界面,因此我遇到了一个有趣的问题。

每当类Fields出现在另一个类的属性上时,它们都有正确的定义,我的意思是,他被定义为Fields,但是在Index类中,在他描述其结构的所有字段参与者的部分中,属性字段不会出现作为Fields,但作为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;
Run Code Online (Sandbox Code Playgroud)

问题是,是否有一种方法可以将看起来像OleVariant类型的Field强制转换为Fields接口类型?

我非常感谢StackOverflow中的所有帮助

Dav*_*nan 6

如果我正确理解了您的问题,那么您正在询问如何将变体转换为IDispatch。这样做:

IDispatch(V)
Run Code Online (Sandbox Code Playgroud)

在您的情况下,我认为您还有另一种类型,Fields它源自IDispatch。您可以像下面这样:

IDispatch(V) as Fields
Run Code Online (Sandbox Code Playgroud)