尝试针对 dll 链接时未解析的外部

  • 本文关键字:外部 链接 dll c++ dll lnk2019
  • 更新时间 :
  • 英文 :


我正在尝试链接到我拥有所有源代码的 dll,但我无法访问我在其中创建的 dirt Simple 类而不获取LNK2019。

我做了这个:

class makeprob
{
public:
makeprob();
~makeprob();
};

随着实施:

makeprob::makeprob() { }
makeprob::~makeprob() { }

作为一个不错的简单模板。 然后在我的实际项目中,我有以下内容:

#include "evil_dll.h"
class PC
{
public:
PC() { };
~PC() { };
static makeprob ProblemCreator;
};

随着实施:

#include "evil_dll.h"
makeprob PC::ProblemCreator;

当我尝试链接到它并构建一个makeprob类时,我得到

LNK2019 unresolved external symbol "public: __thiscall makeprob::makeprob(void)" (??0makeprob@@QAE@XZ) referenced in function "void __cdecl `dynamic initializer for 'public: static class makeprob PC::ProblemCreator''(void)" (??__E?ProblemCreator@PC@@2Vmakeprob@@A@@YAXXZ)

我已经检查了我是否正在链接到库,我是。 据我所知,dll 是与我的 32 位应用程序一起使用的 32 位 dll。 我已经在使用 dll 中的函数,但它们已使用 __declspec(dllimport) 声明

我不得不承认;我对此都持赞同态度。 我不知道我是否应该在接收器上做任何特定的事情来将一个类从 dll 中带到对面。 这是学校测试的一部分,部分说明告诉我不需要编辑源代码(只需使用提供的类)。 我只创建了makeprob类,以使问题易于在此处发布。

任何建议都是无价的! 非常感谢!

Scheff 实际上在上面的评论中回答了这个问题,只是将其形式化为 Stack Overflow,但 Scheff 值得所有酷发型和雷朋太阳镜积分。

我的问题是类实现不导出构造函数或析构函数。 我上面的makeprob头文件应该是这样的:

class makeprob
{
public:
__declspec(dllexport) makeprob();
__declspec(dllexport) ~makeprob();
};

才能访问这些内容。 Scheff 进一步建议为此使用宏(我发现它们已经存在:systemAPI),而不是手动写出它。

这并不能绕过我的教授告诉我不需要编辑源代码,但是由于我导入的类的所有其他函数前面都有systemAPI,只有构造函数和析构函数没有,所以我要称之为疏忽? 除非有一种花哨的方法可以在没有构造函数/析构函数的情况下导入类。

谢谢大家!

最新更新