У меня есть простое консольное приложение на c #, которое вызывает функции из c ++ - dll. Для функций с нулевым или целочисленным параметром (Create3DJSon2 и Create3DJSon3 - см. Ниже) я могу выполнить отладку в коде c ++ - т. Е. Кнопка «step into» переходит в код c ++. Для функции со строковым параметром (Create3DJSon1 ниже) я не могу войти в функцию при отладке. Отладчик просто переходит на следующую строку в коде c #. Я использую VS2017 (15.9.17). Параметр «Включить отладку собственного кода» включен. C ++ и C # компилируются в режиме отладки. Я играл с параметрами DLLImport, но безуспешно. Заранее спасибо за предложения!
c ++ dll:
namespace BL
{
extern "C" __declspec(dllexport) void __stdcall Create3DJSon1(const char* jsonScript)
{
}
extern "C" __declspec(dllexport) void __stdcall Create3DJSon2()
{
}
extern "C" __declspec(dllexport) void __stdcall Create3DJSon3(int i)
{
}
}
c # -app:
class Program
{
static void Main(string[] args)
{
Create3DJSon1("Hallo"); //debugging does not work
Create3DJSon2(); //debugging works
Create3DJSon3(4); //debugging works
}
[DllImport("bl_tools_debug.dll", CallingConvention = CallingConvention.StdCall)]
public static extern void Create3DJSon1(string jsonScript);
[DllImport("bl_tools_debug.dll", CallingConvention = CallingConvention.StdCall)]
public static extern void Create3DJSon2();
[DllImport("bl_tools_debug.dll", CallingConvention = CallingConvention.StdCall)]
public static extern void Create3DJSon3(int i);
}