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

Unresolved external when trying to link against a dll

我正在尝试 link 针对我拥有所有源代码的 dll,但我无法访问我在其中创建的简单内容 class 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;

然后当我尝试 link 反对它并构造一个 makeprob class 时,我得到

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)

我已经检查过我 link 反对 lib 并且我是。据我所知,该 dll 是与我的 32 位应用程序一起使用的 32 位 dll。我已经在使用 dll 中的函数,但是它们是用 __declspec(dllimport)

声明的

不得不承认;我对此表示赞同。我不知道我是否应该在接收器上做任何特定的事情来从 dll 中获取 class。这是学校测试的一部分,部分说明告诉我不需要编辑源代码(只需使用提供的 classes)。我只创建了 makeprob class 来使问题简单到 post 到这里。

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

Scheff 实际上在上面的评论中回答了这个问题,只是为了 Stack Overflow 将其形式化,但 Scheff 值得所有 cool-haircut-and-rayban-sunglasses 分。

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

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

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

我的教授告诉我不需要编辑源代码,但由于我正在导入的 class 的所有其他函数前面都有 systemAPI,所以这并没有解决,并且只有构造函数和析构函数没有,我会称之为疏忽?除非有一种奇特的方法可以在没有 constructor/destructor.

的情况下导入 class

谢谢大家!