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

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

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

关于正确注册 DLL 可能缺少什么以及为什么不显示消息的任何建议。

我如何调试这个。

最佳答案

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

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

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

更新。没有可用的 Visual Studio 项目这一事实并不是真正的障碍。使用适当的命令行启动调试 session 的虚假项目将正常工作。

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

关于visual-c++ - 调试 DLLRegisterServer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9597129/

10-17 00:25