c# - 从 C# (VS2013) 调用 C++ 函数时隐藏的调试信息

标签 c# c++ interop clr

我有一个包含 2 个项目的 VS2013 解决方案:

  • C# 项目
  • 和一个 C++ (CLR/DLL) 项目

我目前正在尝试解决这些问题,但到目前为止我还没有成功。

  1. 如果我在 C++ 代码中放置断点并运行 C# 项目,当从 C# 调用 C++ 代码时,调试器不会中断/暂停。

  2. 我无法在 C++ 入口函数中调试(即查看值)局部变量:

Instead of seeing an array of 0s, the debugger shows 'CppImplementationDetails

  1. 我在 VS2013 中构建解决方案时收到此警告:

C:\Program 文件 (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1697,5):

warning MSB3270: There was a mismatch between the processor architecture of the project being built "MSIL" and the processor architecture of the reference "C:\Projects\MyProject\Debug\DSPClassLibrary.dll", "x86".

这种不匹配可能会导致运行时失败。请考虑通过配置管理器更改项目的目标处理器架构,以便使项目和引用之间的处理器架构保持一致,或者依赖于处理器架构与项目的目标处理器架构相匹配的引用。

C#项目目标平台设置为:AnyCPU

C++项目目标平台设置为:Win32

我不确定什么是正确的设置或如何解决这个问题。

最佳答案

  1. 您必须在 C# 项目的项目设置中设置“启用 native 代码调试”。 将达到 native 代码中的断点。有时(在 VS2010 中很常见)您必须将 C++/CLI 中的调试器设置更改为混合调试(默认设置为自动)。

  2. 见一

  3. 默认情况下,C# 项目始终是 AnyCPU。它们可以在 32 位或 64 位环境中运行。如果使用 VS2013 创建,C++ 默认为 32 位。您应该将 C# build设置设置为 32 位,以确保所有这些设置都能在不同的环境中正常工作。对于 32 位,设置为“x86”。

关于c# - 从 C# (VS2013) 调用 C++ 函数时隐藏的调试信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29855590/

相关文章:

c++ - googletest架构x86_64错误的 undefined symbol

C++:将元组转换为类型 T

C#类构造函数默认值问题

c# - 将 ASP.NET 客户端 ID 传递给 javascript 函数

c# - 如何使用 C# 动态创建对象?

c# - 使用 Excel Interop 并获取打印对话框

.net - 可移植/可互操作的 WCF 契约(Contract)

c# - 如何从子表单打开表单并在主表单面板中显示

c++ - Qt 容器 - 我应该选择哪个?

vb.net - C# DLLImport 转换为 VB.NET DLLImport ......我错过了什么?