我沒有意識到.dll庫中的對象類型依賴於編譯時發生的事情可能會遇到問題,直到我看到問題Could I ignore C4251 warning in this case?事實上,如果庫的編譯設置和使用庫的程序是不同的,可能會發生一些錯誤。這裏有一個例子:爲什麼我會有運行時檢查失敗錯誤?
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.cpp
#include "dll.h"
#include <iostream>
using namespace std;
int main(void)
{
HelloWorld myworld;
return 0;
}
如果我編譯dll.h和dll.cpp到用DTEST的定義創建dll.lib和dll.dll,但不用DTEST的定義編譯exe.cpp。我將有一個運行時檢查失敗#2錯誤。有人可以解釋爲什麼我有這個錯誤。謝謝!
您是否期望您的程序運行?你會如何證明它? – 2013-05-03 16:49:00