所以我有这个 DLL,我使用 AfxLoadLibrary 从我的主应用程序中调用它。一切正常,让我加载它并调用函数。
奇怪的是这个。
如果我的应用程序首先使用从另一个应用程序启动
::CreateProcess( File, CmdLine, 0, 0, FALSE, DETACHED_PROCESS, 0, 0, &StartupInfo, &ProcInfo )
然后启动的应用程序无法再加载 dll。
小图以免混淆任何人。
MainApplication -> Dll(一切正常)
启动器 -> MainApplication -> DLL(AfxLoadLibrary 因 ERROR_NOACCESS 而失败)
应用程序和 dll 都在同一个目录中。
编辑:
我设法获得的更多信息。实际上是 dll 中的这段代码在 ParseCommandLine 处失败。
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
if (!ProcessShellCommand(cmdInfo))
return FALSE;
没有这个,dll 根本不会加载,所以任何人都可以说出启动器应用程序参与后发生了什么变化。