使用外部DLL时未解析的外部符号

时间:2014-08-15 02:55:04

标签: c++ dll

尝试使用外部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)。

1 个答案:

答案 0 :(得分:0)

在类定义中,您需要在使用__declspec(dllexport)dll的同时指定__declspec(dllimport),我认为您正在使用MYAPI

更改类定义如下:

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