所以我正在尝试手动执行 AxImp 所做的事情(我正在动态执行)。
我的产品是第三方产品的广泛发布、认可的“附加组件”。他们有一个 OCX,我使用 COM 引用将其添加到我的表单中...但是,如果客户拥有(或安装)他们产品的更新版本,我的产品将无法再加载 OCX。
因此我尝试动态加载他们的 OCX。除了我需要他们的一个 OCX 中的一个接口(interface)的 GUID 之外,我已经完成了所有工作。我知道类型名称是什么,OCX >已<在系统上注册。如何仅从类型名称获取对象的 GUID?
请注意,Assembly.LoadFrom() 不起作用,因为 OCX 不是 .NET,它是 COM。
最佳答案
由于您的评论让我们知道 GUID 在 OCX 中找到但未在 HKEY_CLASSES_ROOT
下注册,因此我们必须从类型库中读取它:
调用
LoadTypeLib
或LoadTypeLibEx
,传递 .OCX 文件的路径然后使用
FindName
返回对象的方法。然后
GetTypeAttr
其次是PtrToStructure
得到TYPEATTR
具有 GUID 的结构。
关于c# - 按类型名称获取 GUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4950879/