【发布时间】:2020-10-10 13:19:23
【问题描述】:
使用 Visual Studio 2019。从 c# 调用 c 函数很常见,但是当出现运行时错误时,我会得到一个弹出窗口:
不过,我想真正闯入 c++ 代码,以便调试它,特别是查看调用堆栈、观察局部变量、添加断点等。
如何做到这一点?
如果需要演示项目: https://github.com/mprevot/InteropDemo
我正在调用一个设计为失败的 c 函数:
#ifndef Pinvoke
#define Pinvoke extern "C" __declspec(dllexport)
#endif
std::wstring ToString(int number)
{
std::wstringstream s;
s << "got number " << number;
return s.str();
}
Pinvoke auto GetNumbers() -> void
{
std::vector<int> array0{11,12,13,14};
std::vector<int> array1{21,22,23};
for (size_t i = 0; i < 4; i++)
ToString(array0[i]);
for (size_t i = 0; i < 4; i++)
ToString(array1[i]);
}
我从 c# 调用这样的函数:
internal static class NativeLibCall
{
public const string _dll = "NativeLib.dll";
[DllImport(_dll, CallingConvention = CallingConvention.StdCall)]
internal static extern void GetNumbers();
}
public class NativeLibInterop
{
public void GetNumbers() => NativeLibCall.GetNumbers();
}
【问题讨论】:
-
这就是断言在 C/C++ 代码中的工作方式。相当重要的是,它以这种方式工作,因为当断言失败时,您通常没有可查看的源代码,因此无法判断出了什么问题。如对话框所述,您必须单击“重试”按钮。
标签: c# c++ debugging interop visual-studio-2019