windows - 为什么我不能浏览 dll 来了解其中的内容? : "Some components could not be browsed"

标签 windows dll com objectbrowser

我正在寻找一个丢失的 COM 接口(interface) X,我怀疑它是在 Y.dll 中定义的。我可以使用

查看这个假定的界面
grep X Y.dll

表示“匹配”。欢呼,怀疑得到证实!

唉,当我在 Visual Studio Express 中使用对象浏览器时,试图将 Y.dll 添加到我的自定义组件集中,我收到错误:“无法浏览某些组件”弹出窗口。

那么我无法浏览这个dll的原因是什么? COM 接口(interface)是否可以有意或无意地受到保护、隐藏、保护或遮蔽?显然我需要一个底漆!

从官方的角度来看,Microsoft 对此的所有了解似乎都缺乏洞察力:

This error generally occurs when you attempt to add a file type that does not support object browsing, such as .htm and .txt files, in the Component Selector dialog box. The Object Browser supports file types such as .bsc, .olb, .tlb, .dll, .exe, and .ocx.

说真的,dll或exe不支持对象浏览的原因是什么?初学者将不胜感激任何指向教程或书籍的指针!谢谢。

最佳答案

COM 对象浏览器依赖 metadata (type libraries) exported 通过 COM 服务器(dll、exe、ocx 等)。

问题是 COM 服务器不需要导出关于它实现的接口(interface)的任何元数据。不幸的是,我发现了很多这样的服务器(因此需要知道其他方式支持哪些 CoClasses、接口(interface)等)。

检查您的 COM 服务器 (y.dll) 是否包含名为“TYPELIB”的资源,类似于:

COM typelib resource

希望这对您有所帮助。

关于windows - 为什么我不能浏览 dll 来了解其中的内容? : "Some components could not be browsed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13897610/

相关文章:

windows - 如何使用 PowerShell 获取远程计算机的可用物理内存

ruby - Sass 使用 Ruby - '"“C :\Program' is not recognized as an internal or external command

windows - 带有 CPack 的应用程序符号

windows - 如何为 Windows 编写 wsgen 脚本

c# - 为任何数据库支持编写通用的驱动程序类

powershell - 如何在PowerShell中查看可用COM对象的描述列表?

dll - regsvr32 不会在注册表中创建任何条目

c++ - 如何将 .dll 库与 C++ VS 项目链接起来?

com - COM 插件和 VSTO 插件有什么区别

c++ - IWebBrowser2::Navigate2 错误处理