Неразрешенный внешний символ при использовании внешней библиотеки
Я получил неразрешенную внешнюю ошибку символа при попытке использовать функцию из внешней библиотеки 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);
};