尝试 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
谢谢大家!
我正在尝试 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谢谢大家!