Я создал оболочку для выполнения кода C# с использованием VS CLR Lib (. Net Framework). после получения wrapper.lib я протестировал его, добавив в консольное приложение C ++, созданное с помощью VS.
#pragma once
#include <string>
#ifdef BUILD_DLL
#define DECLSPECIFIER __declspec(dllexport)
#else
#define DECLSPECIFIER __declspec(dllimport)
#endif
using namespace std;
namespace Wrapper {
class DECLSPECIFIER CppWrapper
{
public:
CppWrapper();
virtual ~CppWrapper();
public:
bool isConnected();
private:
void* conObject_impl;
};
}
Исходя из того, что я нашел в inte rnet, я должен использовать:
#ifdef BUILD_DLL
#define DECLSPECIFIER __declspec(dllexport)
#else
#define DECLSPECIFIER __declspec(dllimport)
#endif
, но когда я компилирую свой проект C ++, я получаю ошибку LINK2019. чтобы решить это я нашел два варианта. Первый вариант: добавление определений DECLSPECIFIER к методам моего класса вместо того, чтобы использовать его только в определении класса. Второй вариант: замена dllimport на dllexport (используя только dllexport def в проектах weapper и C ++)
С обоими вариантами все нормально в моем консольном приложении VS C ++. Но когда я добавил их (lib, .hpp и .dll) в мое тестовое приложение Google, которое использует Mingw, оно продолжает возвращать ошибки компоновщика (я сделал все настройки компоновщика, у меня также есть другой файл DLL, который работает просто отлично).
Исходный код: неопределенная ссылка на _imp___ZN3Wrapper6CppWrapperC1Ev'
Without dllimport (replace it with dllexport): "undefined reference to
Wrapper :: CppWrapper :: CppWrapper () '"Добавление BUILD_DLL к методам вместо класса def:" неопределенная ссылка на `Wrapper :: CppWrapper :: CppWrapper () '"
Я хочу спросить, возможно ли импортировать CLR .lib, подготовленный с VS, в мой проект, использующий mingw? Если да, то что мне не хватает?