使用没有内联代码的DLL时LNK2028和LNK2019错误

时间:2013-01-08 13:35:03

标签: c++ .net dllimport unmanaged lnk2019

这是我第一次使用.NET,并且在使用多个项目时给了我很多时间。我究竟做错了什么?这就是我所做的:

1创建一个新项目(和解决方案)。一个名为“Lib”的“类库”。

2使用以下代码将文件“Comp1.h”添加到“Header Files”:

#ifndef COMP1_H
#define COMP1_H
class comp1
{
public:
    comp1(void);
    ~comp1(void);
}
#endif

3使用以下代码将文件“Comp1.cpp”添加到“Source Files”:

#include "stdafx.h"
#include "Comp1.h"
comp1::comp1(void){}
comp1::~comp1(void){}

4我用:

覆盖自动创建的“Lib.h”文件的代码
#ifndef LIB_H
#define LIB_H
#include "Comp1.h"
#endif

5添加一个名为“Test”的“CLR空项目”并将其设置为启动项目。

6使用以下代码将“test.cpp”文件添加到“Test”项目的“Source Files”:

#include "../Lib/Lib.h"
#using "../Debug/Lib.dll"//Is this line mandatory?
int main()
{
comp1 component;
return 0;
}

7在“测试”属性中添加“Lib”作为参考。

8在“项目依赖关系”中确保“测试”依赖于“自由”。

9将它们编译为/ clr

这就是我得到的:

1>test.obj : error LNK2028: unresolved token (0A000009) "public: __thiscall comp1::comp1(void)" (??0comp1@@$$FQAE@XZ) referenced in function "int __cdecl main(void)" (?main@@$$HYAHXZ)
1>test.obj : error LNK2028: unresolved token (0A00000A) "public: __thiscall comp1::~comp1(void)" (??1comp1@@$$FQAE@XZ) referenced in function "int __cdecl main(void)" (?main@@$$HYAHXZ)
1>test.obj : error LNK2019: unresolved external symbol "public: __thiscall comp1::~comp1(void)" (??1comp1@@$$FQAE@XZ) referenced in function "int __cdecl main(void)" (?main@@$$HYAHXZ)
1>test.obj : error LNK2019: unresolved external symbol "public: __thiscall comp1::comp1(void)" (??0comp1@@$$FQAE@XZ) referenced in function "int __cdecl main(void)" (?main@@$$HYAHXZ)

如果我创建内联函数,则不会出现此问题。

在论坛上,您可以找到包含文件错误的答案,但我很确定我将所有内容都编码正确。

谢谢。

1 个答案:

答案 0 :(得分:1)

创建DLL时,必须使用__declspec(dllexport)指令明确标记要导出的函数和类,从而使它们可供客户端导入。导入类时,必须使用__declspec(dllimport)指令。

This document显示如何在标题中标记类和全局函数,以便它们可用于导出和导入。