-1

Visual C++ 2010 でスケルトン DLL をコンパイルしようとしました。プリコンパイル済みヘッダーを無効にし (それを行う理由があります)、単純な本体を持つ 1 つの関数で 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
4

1 に答える 1

0

このような問題に困惑している場合は、プリコンパイルされた出力を要求し、.i ファイルのエラーの場所を調べてください。いくつかのマクロの効果、またはインクルードが見つからない、または予期しないものがピックアップされたことを発見する場合があります。

より軽量なバージョンは、C++/advanced で「show includes」をオンにすることです。

于 2013-05-29T01:07:26.793 に答える