我可以很好地加载控件(伪代码):
Set o = CreateObject("DevsoftCustom.CommControl")
现在,我需要找到该 ocx 的文件和目录(这样我就可以读取 ocx 上的版本标记,并从该目录中的配置文件中读取)。
这是如何在 C# 和 vb.net 中完成的? (本项目在vb.net中)
最佳答案
Now, I need to find the file and directory for that ocx
假设您没有使用私有(private) COM 注册,此类信息在注册表中。
HKCR\CLSID\<SOME-GUID>\LocalServer="<path>"
...或者:
HKCR\<PROG-ID>\CLSID=<GUID> // use this GUID in the example above
或者,如果您不想使用注册表,您可以使用 native 函数 CLSIDFromProgID()
。 Tell me more...
这是 OLE/COM Object Viewer 中Microsoft Outlook Date Control 的简单表示.
You can use the OLE/COM Object Viewer to view a control's interfaces.
因此,在您的情况下,根据程序 ID "DevsoftCustom.CommControl"
在注册表中查找类 ID即
- 在 HKCR 下,查找 key DevsoftCustom.CommControl
- 会有一个名为CLSID的子键,注意默认值
- 打开 HKCR\CLSID\<your-key-from-step-2>
- 路径将位于名为 LocalServer32 的子项中
使用 Office 示例:
一旦了解了 COM 的工作原理,就可以轻松地在 C# 中实现上述内容。
Isn't there a more direct way to ask the OS based on the object/control name?
据我所知,正如 Damien 所提到的,COM(包括 OCX)的要点是您不关心某物在哪里,您只需要一个实例。
最接近的相似之处是在 GAC 中有一个 .NET 程序集,您希望在其中创建一个对象的实例,但又不想担心在同一台计算机上一遍又一遍地部署相同的程序集。当然,GAC 的用途远不止于此,因此比较就此结束。
关于c# - 如何在 vb.net 中获取 OCX 的位置和文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32754027/