Неразрешенный внешний символ при использовании внешней библиотеки

Я получил неразрешенную внешнюю ошибку символа при попытке использовать функцию из внешней библиотеки DLL! Вот код из экспортированной DLL:

//MathFunc.h
#pragma once

template <class T>
class MyMathFuncs
{
public:
    T Add(T a, T b);
};

extern "C" {
    MYAPI MyMathFuncs<int>* createInst(){
        return new MyMathFuncs<int>;
    }
}

//MathFunc.cpp
#include "MathFuncsDll.h"
#include <stdexcept>

using namespace std;

template <class T>
T MyMathFuncs<T>::Add(T a, T b)
{
    return a + b;
}

После компиляции этого проекта я получил файлы.dll и.lib. После этого я создал новый проект и добавил.dll-файл в выходной каталог и.lib-файл в linker->Input-> Дополнительные зависимости. Вот код в новом проекте:

//main.cpp
#include <iostream>
#include "MathFuncsDll.h"

using namespace std;

int main(){
    MyMathFuncs<int> * pObj = createInst();
    cout << pObj->Add(1, 1) << endl;

    cin.get();
    return 0;
}

Однако, когда я компилирую это вызывает ошибку:

Error   1   error LNK2001: unresolved external symbol "public: int __thiscall       MyMathFuncs<int>::Add(int,int)" (?Add@?$MyMathFuncs@H@@QAEHHH@Z)    N:\Play around Code\DllApplication\DllApplication\main.obj

Это потому что я ввел dll неправильно или как? Я проверил все настройки проекта в новом проекте, который включал дополнительные включения и дополнительные зависимости (для.lib).

1 ответ

Решение

В определении класса необходимо указать __declspec(dllexport) во время генерации dll а также __declspec(dllimport) используя это, я думаю, что вы делаете с MYAPI,

Измените определение класса следующим образом:

template <class T>
class MYAPI MyMathFuncs
{
public:
    T Add(T a, T b);
};
Другие вопросы по тегам