【问题标题】:Strange error when compiling Visual C++ DLL编译 Visual C++ DLL 时出现奇怪的错误
【发布时间】:2013-04-26 10:46:13
【问题描述】:

我尝试在 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

【问题讨论】:

  • 你检查过这个答案stackoverflow.com/questions/531916/… 吗?
  • 我可以将您的代码粘贴到一个空项目中,然后在调试和发布中编译确定。这可能与@Zuljin 的评论有关。
  • @Zuljin,谢谢,你说得对,我有 标头,所以这就是原因。仍然是 C++ 为什么要访问它的问题,我从未在我的代码中引用此标头,但对于 Microsoft 来说,Stack Overlow 的问题更多。
  • Windows.h 包括很多幕后的东西,包括一些 C 标准库头文件,如 string.h

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


【解决方案1】:

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

较轻的版本是在 C++/advanced 中打开“显示包含”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多