尝试使用外部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文件添加到链接器 - >输入 - >附加依赖项。以下是新项目中的代码:
//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)。
答案 0 :(得分:0)
在类定义中,您需要在使用__declspec(dllexport)
和dll
的同时指定__declspec(dllimport)
,我认为您正在使用MYAPI
。
更改类定义如下:
template <class T>
class MYAPI MyMathFuncs
{
public:
T Add(T a, T b);
};