Visual C ++ ATL Com注册问题

时间:2012-10-30 19:40:53

标签: regsvr32

我有一个正在创建COM DLL的Visual C ++ 6项目。这是一个我多年没有用过的旧项目,但最近我又回到它来更新DLL的一些功能。我遇到的问题是,当我尝试手动注册由项目创建的DLL(使用regsvr32)时,我得不到任何响应。它并没有说它成功了,也没有说它失败了。我已经验证DLL没有添加到注册表中。我从未见过regsvr32的情况,因为它不会显示任何确认消息。

此外,DLL设置为在项目中自行注册,当它尝试执行此操作时,它也不会显示消息。

我很久没有接触过这个项目了,但是最后一次触摸它,它没有问题。现在我回到它,突然间我遇到了这个问题。就好像Visual C ++项目创建的DLL与当前版本的Windows不兼容。我已经将开发软件更新到SP6,但它没有改变这种情况。

当我指向创建的DLL时,我在regsvr32上运行了Depends,它显示了这条消息:

LoadLibraryExW(“C:\ Source32 \ BIS \ Projects \ ALFA \ DigiPixSvc \ DigiPixObj \ Debug \ DigiPixObj”,0x00000000,LOAD_WITH_ALTERED_SEARCH_PATH)返回NULL。错误:操作系统无法运行%1(182)。

任何人都可以告诉我为什么会发生这种情况以及我可以做些什么来纠正它?

1 个答案:

答案 0 :(得分:0)

免责声明:由于我没有安装VS 6.0,我将不得不使用一些Google搜索来为您提供VC 6.0对话框的确切步骤 - 因此部分信息可能不准确。我相信这是正确的 - 这正是你在当前IDE中所做的,仅适用于VC 6.0。

在您经历调试DLL的麻烦之前,请确保通过Dependency Walker运行它以验证您的计算机上是否存在所有依赖项。不要在regsvr32上运行 Dependency Walker - 重要的是你的DLL是否具有依赖性。如果它们丢失,regsvr32将无法加载DLL。

当你尝试注册它时,看看你的DLL是否被regsvr32加载,你需要通过DLLRegisterServer()函数进行调试,看看那里发生了什么 - 这是COM DLL必须的4个入口点之一当DLL即将注册时,has和regsvr32调用此函数。为此,您必须将regsvr32设置为项目的启动程序,并将调试构建的DLL的完整路径作为regsvr32的命令行参数传递。

  • 为您的项目启动项目属性
  • 转到调试标签。
  • 确保已选择常规类别。
  • 可执行文件的调试会话文本框中输入regsvr32的完整路径。
  • 程序参数文本框中输入DLL调试版的完整路径。确保您的DLL具有PDB文件,以便在调试期间查看符号信息。
  • DLLRegisterServer()的第一行放置一个断点。此函数中的代码可能很长或很短,具体取决于它的创建方式:由向导生成,由开发人员编写等等。
  • 开始调试。

你的断点应该被击中,你应该能够逐步完成注册码,看看它失败了。

相关问题