如何在vb.net中获取OCX的位置和文件名

Jon*_*ica 2 .net c# vb.net winapi ocx

我可以很好地加载控件(伪代码):

Set o = CreateObject("DevsoftCustom.CommControl")
Run Code Online (Sandbox Code Playgroud)

现在,我需要找到该 ocx 的文件和目录(以便我可以读取 ocx 上的版本戳,并从该目录中的配置文件中读取)。

这是如何在 C# 和 vb.net 中完成的?(这个项目在vb.net)

Mic*_*kyD 5

现在,我需要找到那个 ocx 的文件和目录

假设您没有使用私有 COM 注册,则此类信息在注册表中。

HKCR\CLSID\<SOME-GUID>\LocalServer="<path>"
Run Code Online (Sandbox Code Playgroud)

...或者:

HKCR\<PROG-ID>\CLSID=<GUID>  // use this GUID in the example above
Run Code Online (Sandbox Code Playgroud)

或者,如果您不想使用注册表,则可以使用本机功能CLSIDFromProgID()告诉我更多...

下面是一个简单的表示的Microsoft Outlook日期控制OLE / COM对象查看

您可以使用 OLE/COM 对象查看器来查看控件的接口。

在此处输入图片说明

因此,在您的情况下,根据程序 ID “DevsoftCustom.CommControl”在注册表中查找类 ID

IE

  1. HKCR 下,查找密钥DevsoftCustom.CommControl
  2. 会有一个名为CLSID的子键,记下默认值
  3. 打开HKCR\CLSID \ < your-key-from-step-2 >
  4. 该路径将位于名为LocalServer32的子项中

使用 Office 示例:

在此处输入图片说明

一旦你知道 COM 是如何工作的,就很容易在 c# 中实现上面的内容。

没有更直接的方法可以根据对象/控件名称询问操作系统吗?

并不是我知道并且正如 Damien 所提到的,COM(包括 OCX)的重点是您不关心某些东西在哪里,您只需要一个实例。

最接近的并行是在 GAC 中有一个 .NET 程序集,您希望在其中创建对象的实例,但又不想担心在同一台计算机上一遍又一遍地部署相同的程序集。当然,GAC 的用途远不止于此,因此比较就到此为止。