2013-05-02 82 views
-1

我嘗試在Visual C++ 2010中編譯一個框架DLL。我禁用了預編譯頭文件(我有理由這麼做),並用一個函數編譯了DLL並帶有微不足道的正文。但是,編譯失敗的文件dllmain.cpp有很多錯誤的那樣:編譯Visual C++ DLL時出現奇怪的錯誤

\microsoft visual studio 10.0\vc\include\cstring(18): error C2039: 'memchr' : is not a member of '`global namespace'' 

我dllmain.cpp代碼如下:

// dllmain.cpp : Defines the entry point for the DLL application. 
#include <Windows.h> 

BOOL APIENTRY DllMain(HMODULE hModule, 
         DWORD ul_reason_for_call, 
         LPVOID lpReserved 
        ) 
{ 
    switch (ul_reason_for_call) 
    { 
    case DLL_PROCESS_ATTACH: 
    case DLL_THREAD_ATTACH: 
    case DLL_THREAD_DETACH: 
    case DLL_PROCESS_DETACH: 
     break; 
    } 
    return TRUE; 
} 

對我來說,它看起來像這樣的代碼永遠不會調用任何與字符串爲什麼Visual C++在其編譯過程中訪問CString,爲什麼它會搜索memchr函數?從日誌彙編命令行如下:

CL.exe /c /ZI /nologo /W3 /WX- /Od /Oy- /D WIN32 /D _DEBUG /D _WINDOWS /D _USRDLL /D MYDLL_EXPORTS /D _WINDLL /D _UNICODE /D UNICODE /Gm /EHsc /RTC1 /MTd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Fo"Debug\\" /Fd"Debug\vc100.pdb" /Gd /TP /analyze- /errorReport:prompt dllmain.cpp 
+2

你檢查了這個答案http://stackoverflow.com/questions/531916/error-c2039-memchr-is-not-a-member-of-global-namespace? – Zuljin 2013-05-02 09:57:55

+0

我可以將你的代碼粘貼到一個空白的項目中,然後在Debug和Release中編譯好。這可能與@ Zuljin的評論有關。 – 2013-05-02 10:09:59

+0

@Zuljin,謝謝,你說得對,我有頭,所以就是這個原因。這仍然是問題,爲什麼C++訪問它,我從來沒有在我的代碼中引用這個頭文件,但是對於微軟來說,Stack Overlow更是個問題。 – Vitaliy 2013-05-02 10:25:08

回答

0

如果你百思不得其解的問題,這樣的要求預編譯的輸出,並期待在.i文件中錯誤的地方。你可能會發現一些宏觀的影響,或者包含缺失或意外的被拾取。

打火機的版本是在C++/advanced中打開'show includes'。