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

Strange error when compiling Visual C++ DLL

本文关键字:错误 Visual c++ DLL 编译      更新时间:2023-10-16

我尝试在Visual c++ 2010中编译一个骨架DLL。我禁用了预编译的头(我有理由这样做),并使用一个函数编译DLL。但是,在dllmain.cpp文件上编译失败,出现如下错误:

microsoft visual studio 10.0vcincludecstring(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"Debugvc100.pdb" /Gd /TP /analyze- /errorReport:prompt dllmain.cpp

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

一个较轻的版本是在c++/advanced中打开'show includes'