【问题标题】:How do I troubleshoot a COM component?如何对 COM 组件进行故障排除?
【发布时间】:2015-12-14 07:35:55
【问题描述】:

对于这个问题含糊不清,我深表歉意。

在将应用程序迁移到新的服务器环境期间,公开应用程序 API 的 COM 组件 (.dll) 文件已停止工作。

有什么方法可以解决 COM 组件的问题吗? COM 组件是否有标准的方法来记录故障(Windows 事件查看器中没有事件)?我可以以任何方式“检查”组件吗?

我已经使用 regsvr32.exe 成功注册了组件(除了创建一些 Windows 注册设置之外,我不知道这实际上做了什么)。

马丁

【问题讨论】:

  • 它是您编写的 COM 组件还是您使用的 COM 组件?
  • @Bruce 感谢您的回复。这是由第三方编写的 COM 组件,遗憾的是无法提供帮助。两种环境(看起来)是一样的。

标签: c windows com


【解决方案1】:

这种形式的故障排除分为两部分。

首先使用 SYS 内部的 procmon。 SYS internals 这显示了试图打开 COM 服务器的进程的类似 strace 的行为。

查看失败的函数调用。

接下来我会尝试直接在调试器中加载 com 控件,看看那里的任何故障

procmon 的结果将显示注册表位置和文件位置,它们是加载 com 对象的关键。

失败可能是:-

  1. 为一位用户安装,而不是为所有用户安装。这将无法找到命名对象
  2. 架构不正确。如果prog.exe转到64位,将无法加载32位com DLL
  3. 缺少依赖项。其他 DLL 可能无法加载 - 这些将显示在 procmon 跟踪中
  4. 配置数据。如果 com DLL 需要进一步的配置,那么这将显示在 procmon 中的事件中,或者在调试器中的错误中

您可以在调试器中加载任何 DLL。调试符号使它更容易,但我们正试图在它进行的调用中发现错误和异常

【讨论】:

  • 谢谢! “试图打开 COM 服务器”是指客户端连接到 .dll 的位置吗?调试控件是否需要 COM 组件的调试版本,或者该术语在此处不适用?我必须承认我对 COM 几乎一无所知。
  • 非常感谢您的详细回答。
猜你喜欢
  • 2011-02-14
  • 2011-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
相关资源
最近更新 更多