マネージC++に移行しようとしているいくつかのCOMインターフェイスを実装するC++dllがあります。/ clrコンパイラフラグを設定し、ランタイムライブラリプロパティを/MTから/MDに変更して、これら2つのフラグ間の競合を回避しましたが、変更したのはそれだけです。ビルドプロセス中にdllを登録しようとすると、次のエラーが発生します。
R6033-ネイティブコードの初期化中にこのアセンブリのMSILコードを使用しようとしましたこれは、アプリケーションにバグがあることを示しています。これは、ネイティブコンストラクターまたはDllMainからMSILコンパイル済み(/ clr)関数を呼び出した結果である可能性があります。
ローダーロックについて読んだのですが、理解できません。マネージコードに呼び出しを1つも追加していません。DllMainプロシージャの全体は次のとおりです。
[編集-以下のコメントごとに、cppファイルの先頭に管理されていない#pragmaを追加しましたが、改善はありません。Module initは、私が知る限り、ATLライブラリに含まれているすべてのコードです。]
extern "C"
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
lpReserved;
if (dwReason == DLL_PROCESS_ATTACH)
{
_Module.Init(ObjectMap, hInstance, &MYGUID);
DisableThreadLibraryCalls(hInstance);
}
else if (dwReason == DLL_PROCESS_DETACH)
_Module.Term();
return TRUE; // ok
}