visual-c++ - 调试 DLLRegisterServer

标签 visual-c++ dll com registration

我有一个使用脚本构建的 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。

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

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

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

相关文章:

c++ - Linux 和 Windows 上的输出差异

c++ - 澄清使用 CMake 生成 OpenCV 库时的步骤

c++ - 如何在 C++ 中将 CString 转换为 double?

c++ - dll中数据模块的描述?

dll - F#:Microsoft.FSharp.Data.TypeProviders 是否需要配置文件 47?

c++ - 使用 VS2010 在客户端编译 native COM 客户端 stub

c++ - 究竟如何触发访问冲突异常

c# - 为什么我的应用程序在同一目录下找不到依赖的 dll?

c# - x64 机器出现 "Class not registered"错误

com - 杀死系统帐户下的 ATL COM 进程?