コンパイラの警告 (レベル 1) C4747Compiler Warning (level 1) C4747

呼び出すマネージ 'entrypoint': マネージ コードは DLL エントリ ポイントおよび DLL エントリ ポイントから到達した呼び出しを含むローダー ロック下で実行できませんCalling managed 'entrypoint': Managed code may not be run under loader lock, including the DLL entrypoint and calls reached from the DLL entrypoint

コンパイラは、MSIL にコンパイル (可能性の高い) DLL エントリ ポイントを検出します。The compiler found a (probable) DLL entry point compiled to MSIL. エントリ ポイントが MSIL にコンパイルされた DLL を読み込むと潜在的な問題のため MSIL に DLL エントリ ポイント関数のコンパイルを強くお勧めしています。Because of potential problems with loading a DLL whose entry point has been compiled to MSIL, you are strongly discouraged from compiling a DLL entry point function to MSIL.

詳細については、混在アセンブリの初期化リンカー ツール エラー LNK1306を参照してください。For more information, see Initialization of Mixed Assemblies and Linker Tools Error LNK1306.

このエラーを解決するにはTo correct this error

  1. 使用して、モジュールをコンパイルしないで /clrします。Do not compile the module with /clr.

  2. 使用して、エントリ ポイント関数をマーク#pragma unmanagedします。Mark the entry point function with #pragma unmanaged.

Example

次の例では、C4747 が生成されます。The following sample generates C4747.

// C4747.cpp
// compile with: /clr /c /W1
// C4747 expected
#include <windows.h>

// Uncomment the following line to resolve.
// #pragma unmanaged

BOOL WINAPI DllMain(HANDLE hInstance, ULONG Command, LPVOID Reserved) {
   return TRUE;
};