したがって、このDLLがあり、AfxLoadLibraryを使用してメインアプリケーションから呼び出します。それはすべて正常に機能し、ロードして関数を呼び出すことができます。
奇妙な点はこれです。
私のアプリケーションが最初に使用して別のアプリケーションから起動された場合
::CreateProcess( File, CmdLine, 0, 0, FALSE, DETACHED_PROCESS, 0, 0, &StartupInfo, &ProcInfo )
その後、起動されたアプリケーションはdllをロードできなくなります。
誰もが混乱しないように小さな図。
MainApplication-> Dll(すべて正常)
Launcher-> MainApplication-> DLL(AfxLoadLibraryはERROR_NOACCESSで失敗します)
アプリケーションとdllの両方が同じディレクトリにあります。
編集:
私がなんとか得ることができたもう少しの情報。ParseCommandLineで失敗するのは、実際にはdll内のこのコードです。
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
if (!ProcessShellCommand(cmdInfo))
return FALSE;
これがないと、dllはまったくロードされないため、ランチャーアプリケーションが関与すると、何が変更されたかを誰でも言うことができます。