В приложении C # я имею в виду собственную статическую библиотеку C, которую я заключил в DLL C ++ / CLI. Я выбрал статическую библиотеку вместо библиотеки DLL, потому что у меня есть другие ограничения, связанные с процессом выпуска приложения для пользователя. Среди множества тем, доступных на этом форуме, я нашел следующую реализацию.
Главный :
{
MyCLRDLL test = new MyCLRDLL();
if(test.go()) Console.WriteLine("Hello, wrld");
}
В проекте DLL файл MyCLRDLL.hpp
#include "MyNativeLib.h"
#pragma comment(lib, "MyNativeLib.lib")
namespace InteropTest {
public ref class MyCLRDLL
{
CMyNativeLib* mInt ;
public:
MyCLRDLL() { mInt = CMyNativeLib_New() ;} ;
~MyCLRDLL() { CMyNativeLib_Delete(mInt) ;} ;
bool go() { return mInt->areYouThere() ;} ;
};
}
А в собственном проекте MyNativeLib.h
namespace InteropTest
{
class __declspec(dllexport) CMyNativeLib
{
public:
CMyNativeLib() {};
~CMyNativeLib(){};
bool areYouThere() ;
} ;
extern "C" __declspec(dllexport) CMyNativeLib* CMyNativeLib_New();
extern "C" __declspec(dllexport) void CMyNativeLib_Delete(CMyNativeLib* pLib);
}
и MyNativeLib.cpp
#include "MyNativeLib.h"
namespace InteropTest {
extern "C" __declspec(dllexport) CMyNativeLib* CMyNativeLib_New(){return new CMyNativeLib() ;}
extern "C" __declspec(dllexport) void CMyNativeLib_Delete(CMyNativeLib* pLib){delete pLib;}
bool CMyNativeLib::areYouThere() { return true ; }
}
Отладчик не переходит к функции mInt-> areYouThere (). Почему это так? Точки останова в родной части тоже не отлавливаются.
Символы загружаются для MyCLRDLL, «Включить отладку неуправляемого кода» активен в проекте C #, «Тип отладки / отладчика» установлен на Смешанный для обоих проектов C, а в общих параметрах наиболее важные вещи кажутся отмеченными.
Означает ли это, что файл MyCLRDLL.pdb не содержит отладочной информации из кода библиотеки? Как проверить?
(возможен тот же вопрос, что и оставшийся без ответа Отладка неуправляемого C ++ статическая библиотека, включенная в .dll CLR)