在我阅读问题之前,我没有意识到在 .dll 库中依赖于编译时发生的事情的对象类型可能会出现问题,在这种情况下我可以忽略 C4251 警告吗?实际上,如果库的库编译设置和使用该库的程序不同,可能会出现一些错误。这是一个例子:
dll.h
#include <iostream>
#include <string>
using namespace std;
class __declspec(dllexport) HelloWorld
{
public:
#ifdef DTEST
int test;
#endif
HelloWorld();
};
dll.cpp
#include "dll.h"
HelloWorld::HelloWorld()
{
#ifdef DTEST
test=0;
#endif
}
exe文件
#include "dll.h"
#include <iostream>
using namespace std;
int main(void)
{
HelloWorld myworld;
return 0;
}
如果我编译 dll.h 和 dll.cpp 以使用 DTEST 的定义创建 dll.lib 和 dll.dll,但编译 exe.cpp 而不使用 DTEST 的定义。我将遇到运行时检查失败 #2 错误。有人可以解释为什么我有这个错误。谢谢!