从 C++ 应用程序调试动态加载的 C++/CLI DLL

Posted

技术标签:

【中文标题】从 C++ 应用程序调试动态加载的 C++/CLI DLL【英文标题】:Debug a dynamically loaded C++/CLI DLL from a C++ application 【发布时间】:2015-10-06 17:29:35 【问题描述】:

我是 Visual Studio 中的 C++ 新手。

我开发了一个 VS 解决方案:

一个 C++/CLI DLL 项目 (A) 一个 C++ 控制台项目 (B),它使用 LoadLibraryW 动态加载 A

当我运行 B 时,我还需要在 A 中进行调试。但是 A 代码中的断点不起作用,它们有一个警告字形,说明这里不可能中断。

我尝试了很多设置,但没有任何效果。这不是一件容易的事吗?谢谢!

【问题讨论】:

项目 > 属性 > 调试 > 调试器类型 = 混合。然后工具>选项>调试>常规,勾选类似于“托管兼容模式”的选项。 LoadLibrary 不会神奇地启用托管代码,需要先加载和初始化 CLR。使用 COM 或自定义 CLR 托管。或者,如果您真的,真的,真的必须使用 __declspec(dllexport) 入口点。您不必这样做,异常很难处理。 @HansPassant 这不是你第一次救我!! :) 非常感谢你。将调试器类型设置为混合解决了它。 “使用托管兼容模式”已被选中。您能否发表您的评论作为答案,以便我接受?无论如何,我使用 __declspec(dllexport) 因为否则我无法 GetProcAddress 我的 DLL 方法......而且我不知道其他方法...... @HansPassant 好的,我会发布它...无论如何我无法理解有人给我的反对票 我在两个项目上都将 Debuggermode 设置为 Mixed,并设置了 Managed Compat。 “需要先加载 clr”是什么意思? 【参考方案1】:

感谢@HansPassant,解决方案是设置此属性:

项目 > 属性 > 调试 > 调试器类型 = 混合 工具 > 选项 > 调试 > 常规,勾选“使用托管兼容模式”。

LoadLibrary 不会神奇地启用托管代码,需要先加载和初始化 CLR。​​

【讨论】:

以上是关于从 C++ 应用程序调试动态加载的 C++/CLI DLL的主要内容,如果未能解决你的问题,请参考以下文章

如何从我的 C++/CLI 代码进入非托管 C++ 库

尝试从 C++/CLI 调用非托管 C++ 时解决错误

从 C++/CLI 应用程序将 STL 字符串传递给 C++ DLL

从 CLI C++ 应用程序在库中加载 C# WPF 表单

c++ c#

使用 C++/CLI 包装器将二维数组从 C# 传递到非托管 C++