所以我有这个DLL,我使用AfxLoadLibrary从我的主应用程序中调用它。一切正常,让我加载它并调用函数。
奇怪的是这个。
如果我的应用程序首先使用
从另一个应用程序启动::CreateProcess( File, CmdLine, 0, 0, FALSE, DETACHED_PROCESS, 0, 0, &StartupInfo, &ProcInfo )
然后启动的应用程序无法再加载dll。
小图,以免混淆任何人。
MainApplication - > Dll(一切都很好)
启动器 - > MainApplication - > DLL(AfxLoadLibrary失败,ERROR_NOACCESS)
应用程序和dll都在同一目录中。
编辑:
我设法得到的更多信息。实际上,在ParseCommandLine中,dll中的这段代码失败了。
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
if (!ProcessShellCommand(cmdInfo))
return FALSE;
如果没有这个,那么dll根本就不会加载,所以任何人都可以说一旦启动器应用程序介入后发生了什么变化。
答案 0 :(得分:0)
原来问题在于这条线而不是在dll中
CreateProcess( File, CmdLine, 0, 0, FALSE, DETACHED_PROCESS, 0, 0, &StartupInfo, &ProcInfo )
CmdLine变量可能在其中有一个空格,并且没有被包裹在“”中。
这导致命令行在链断裂中没有正确传递
ParseCommandLine(cmdInfo);
并偶然参与了已发布的exe。
编辑:
这不能解决的问题是如果使用CoCreateInstance启动带有dll的exe,ParseCommandLine中的相同问题将返回。