我有一个使用脚本构建的COM DLL。没有可用的Visual Studio项目。当我使用命令regsvr32“c:\windows\system32\dllname.dll
”注册dll时,不会显示任何消息。
我在函数 DllRegisterServer 和DllMain中添加了 DebugBreak(),以期望显示调试对话框。然而什么也没发生。
DLL预期的条目不会添加到注册表中。
有关DLL可以正确注册的内容以及没有显示消息的原因的任何建议。
如何调试此内容。
答案 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