使用Visual Studio2019。从C#调用c函数很常见,但是当发生运行时错误时,我将得到一个弹出窗口,如下所示:
c# - 如何破解从C#Interop调用的C++代码-LMLPHP
但是我想真正地闯入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();
}

最佳答案

正如Kevin Gosse所建议的,并在MSFT documentation中进行了详细介绍,只需启用混合模式调试即可:

09-30 12:53
查看更多