Использование подготовленного C ++ / CLR lib в проекте C ++ mingw - PullRequest
0 голосов
/ 25 февраля 2020

Я создал оболочку для выполнения кода 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? Если да, то что мне не хватает?

...