编译Visual C ++ DLL时出现奇怪的错误

时间:2013-05-02 09:51:31

标签: c++ visual-studio-2010 visual-studio visual-c++ dll

我尝试在Visual C ++ 2010中编译一个框架DLL。我禁用了预编译的头文件(我有理由这样做)并使用一个具有普通主体的函数编译DLL。但是,文件dllmain.cpp上的编译失败,出现了很多错误:

\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

1 个答案:

答案 0 :(得分:0)

如果您对此类问题感到困惑,请询问预编译输出并查看.i文件中的错误位置。您可能会发现某些宏的效果,或者包含丢失或意外的包被拾取。

较轻的版本是在C ++ / advanced中打开'show includes'。