2013-03-12 18 views
4

即時得到一些警告說我有不一致的dll的聯繫,儘管我我的dll像這樣的標題進行分類:不一致的DLL聯動

#ifdef MY_ENGINE_EXPORTS 
#define ENGINE __declspec(dllexport) 
#else 
#define ENGINE __declspec(dllimport) 
#endif 

它當我添加MY_ENGINE_EXPORTS到預處理工作正常,擺脫錯誤的的定義,但我的印象是這應該在構建/導出時自動完成。我說錯了嗎?我包含一個下劃線,因爲該項目是2個字,例如「我的引擎」。我試過它既是MY_ENGINE_EXPORTS也是MYENGINE_EXPORTS,但都不起作用。

正如我所說,我可以將它添加到預處理器的定義,但它是在擾亂我爲什麼它不像它應該那樣行事。

+1

如果您沒有將它添加到預處理器定義中,那麼您將明顯地冒一些翻譯單元意外定義的* not *有MY_ENGINE_EXPORTS#的風險。你也沒有解釋你是如何確定它是#defined。當然這解釋了警告。 – 2013-03-13 00:05:19

+0

我意識到這個問題現在有多愚蠢,但是我看過的每個主題都有以{projectname} _EXPORTS相同格式編寫的#ifdef。我認爲這是一個預定義的宏,該環境爲構建的dll項目創建。這很煩人,但我無法找到我之前看到的鏈接,甚至說它是自動的。 – EvilWeebl 2013-03-13 00:13:49

回答

3

我想這是一個預定義宏,對於DLL創建環境的項目

是的,當你使用Win32項目模板,以獲得DLL項目啓動,它發生。該向導將自動爲您添加PROJECTNAME_EXPORTS預處理器定義。

皺紋是它不能在符號中使用空格,所以它不能使用「我的PROJECT_EXPORTS」。它會下降的空間,並使其MYPROJECT_EXPORTS。這與您使用的那個不匹配,MY_PROJECT_EXPORTS。沒有什麼快速的Edit + Replace當然不能修復。

+0

優秀的答案,謝謝。它沒有爲我創建預處理器定義的原因是因爲我啓動了一個空項目,然後將其更改爲一個dll項目。 – EvilWeebl 2013-03-13 11:29:42

+2

我認爲如果每個人都停止使用「空項目」選項,那麼關於MSVC的所有SO問題中有一半就會消失。不知道什麼是如此有吸引力。 – 2013-03-13 11:55:09