COM/OLE,旧代码和头疼问题

3
我是一位能够提供翻译帮助的助手。

我目前正在处理一个遗留代码,它还停留在90年代。对于COM/OLE/MFC/ATL这些技术,我并不十分了解。因此,我想请有经验的前辈帮忙追踪问题。

  • 所拥有的是旧的MFC/ATL应用程序。
  • 该应用程序可以启动,但最终会在CFormView :: HandleInitDialog(atlmfc\src\mfc\viewform.cpp)中崩溃。

我得到的调试输出如下:

CoCreateInstance of OLE control {6A24B340-7634-11D3-A5B0-0050044A7E1A} failed.
>>> Result code: 0x80040154
>>> Is the control is properly registered?

我知道这是由于某个组件注册失败或解析失败导致的,但我不知道如何找出这个依赖项是什么。我有一个可以运行的旧代码可执行文件,也许我可以使用一些逆向工程来找出是否缺少任何DLL文件,但我真的不知道,我不知道OLE是什么,我真的需要帮助调试。


为了帮助遇到类似问题的人,我也曾经遇到过这样的崩溃,当时我点击了正在被卸载的 ocx 文件,然后依赖项查看器就打开了。它显示 ocx 无法打开某个 dll 文件,但当我将该文件放置在正确的路径下后,程序就可以正常运行而不会崩溃。 - Nav
1个回答

4

看起来像是dxDBGrid.dll。OLE就是对象链接和嵌入。您需要找到dxDBGrid.dll并确保它已注册。您可以使用regsvr32进行注册。

regsvr32的解释


1
可能也被他的病毒扫描器阻止了。 - Hans Passant
你可以搜索注册表... 如果文件是从硬编码的文件路径加载的,则该文件可能不在您期望的位置...(即Program Files与Program Files (x86)) - John Sobolewski
这很有可能是情况,但您是否知道它是dxDBGrid而不是其他组件?在我得到的所有DLL中,我想知道哪些包含了什么。像我说的那样,这是遗留代码,我还没有完全理解每个细节...难道没有一种方法可以找出特定DLL中包含哪些GUID吗? - John Leidegren
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=7007 是一个链接,可以让你使用oleview查看其中的内容。 - John Sobolewski
此外,与com组件相关联的GUID应该是唯一的。因此,我在谷歌上搜索了该guid,以查找具有该clsid的组件,这就是我找到的。所以我相当确定。 - John Sobolewski
OLE Viewer真的很古老,而且缺少一些组件,但它似乎可以工作。这个工具有点奇怪,但我想这可能是我寻找的答案类型。 - John Leidegren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接