调试DLLRegisterServer

时间:2012-03-07 07:04:28

标签: visual-c++ dll com registration

我有一个使用脚本构建的COM DLL。没有可用的Visual Studio项目。当我使用命令regsvr32“c:\windows\system32\dllname.dll”注册dll时,不会显示任何消息。

我在函数 DllRegisterServer 和DllMain中添加了 DebugBreak(),以期望显示调试对话框。然而什么也没发生。

DLL预期的条目不会添加到注册表中。

有关DLL可以正确注册的内容以及没有显示消息的原因的任何建议。

如何调试此内容。

2 个答案:

答案 0 :(得分:7)

DebugBreak在未调试的调试器和崩溃进程下中断。

您需要在C ++项目设置,调试下设置Visual Studio,以便它使用您的DLL(即"$(TargetPath)"或显式完整路径)启动C:\ Windows \ system32 \ regsvr32.exe。开始调试,你的断点就会被击中。

请注意,在64位操作系统中调试32位DLL,您需要C:\ Windows \ syswow64 \ regsvr32.exe。

UPD。没有Visual Studio项目可用的事实并不是一个障碍。一个假的项目,只需用正确的命令行启动调试会话就可以了。

除此之外,如果您仍然可以更新源代码,则可以MessageBox添加DllRegisterServer,尤其是DebugBreak。而不是{{1}},启动COM注册,弹出消息框,然后附加Visual Studio调试器(无需VS项目),设置断点然后关闭消息框以让执行继续并到达点感兴趣的。

答案 1 :(得分:0)

我发现RegSvrEx在这些情况下非常有用。它提供了更好的诊断输出,因为您有源,您可以附加调试器。

http://www.codeproject.com/Articles/3505/RegSvrEx-An-Enchanced-COM-Server-Registration-Util