我试着环顾四周,但无法用答案说服自己,因为 COM/ActiveX 的世界似乎非常混乱。
基本上我想知道的是,给定 GUID,有没有办法知道 ActiveX 控件公开的所有接口、属性和方法?我在某处读到,您只需要询问是否存在特定属性即可。但是在知道那里有什么之前,我该如何询问房产呢?
我猜 IDispatch 做了类似的事情,但我无法弄清楚如何使用它。如果这是可行的,那么一个小片段(最好是 C# 中的)将帮助我更好地理解。
谢谢
我试着环顾四周,但无法用答案说服自己,因为 COM/ActiveX 的世界似乎非常混乱。
基本上我想知道的是,给定 GUID,有没有办法知道 ActiveX 控件公开的所有接口、属性和方法?我在某处读到,您只需要询问是否存在特定属性即可。但是在知道那里有什么之前,我该如何询问房产呢?
我猜 IDispatch 做了类似的事情,但我无法弄清楚如何使用它。如果这是可行的,那么一个小片段(最好是 C# 中的)将帮助我更好地理解。
谢谢
您可以为此使用 PowerShell:
$a = new-object -comobject ProgId
#get properties
$a | Get-Member -membertype properties
#or get all members
$a | Get-Member
在 C# 中,您可以使用Type.GetMembers Method。
您可以使用Microsoft 资源工具包中的OLE/COM 对象查看器。这将列出所有属性/方法/事件/等。
ActiveX 控件不必是自描述的,也不必能够枚举支持的接口和/或属性。与其他 COM 类一样,它们实现了某些接口并实现了一组强制接口,它们非常适合嵌入到主机应用程序中。也就是说,您最终可能无法找到某个有效 ActiveX 控件的属性。
但是,通常情况下,如果给定的控件可以完成大多数控件的工作,您就可以成功完成此任务。Control 的 COM 类通常有一个类型库,您可以通过查看注册表引用或IProvideClassInfo
接口来发现。从那里开始,当您持有ITypeInfo
接口时,您可以找到IDispatch
类的派生接口,然后使用保存此信息的类型库枚举属性和方法。