c - 如何对 COM 组件进行故障排除?

标签 c windows com

对于这个问题的含糊之处,我深表歉意。

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

有什么方法可以对 COM 组件进行故障排除吗? COM 组件是否有记录故障的标准方法(Windows 事件查看器中没有事件)?我可以以任何方式“检查”组件吗?

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

马丁

最佳答案

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

首先使用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。调试符号使它变得更容易,但我们正在尝试发现它所进行的调用中的错误和异常

关于c - 如何对 COM 组件进行故障排除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32630225/

相关文章:

CLion 错误 : Configuration is not specified

windows - 如何在 Windows 后台运行命令?

c++ - 为什么在 win32 中有不同的 TEXT like macros for same thing?

delphi - Delphi有 "getopt"的实现吗?

c - 我在数组中的一个值是 "0"

c - 声明结构的 2 种不同实现之间的区别

c - 多次使用sigaction时出错

windows - 如何在 Visual Studio Code 中导航回关于 *same* 文件的最后一个光标位置?

c# - 关于从 C# 使用 COM 的任何好的教程?

java - 如何在多个 Java 线程中使用 COM 服务器