AfxLoadLibrary / ParseCommandLine因ERROR_NOACCESS而失败

时间:2012-10-05 07:50:15

标签: c++ windows mfc

所以我有这个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根本就不会加载,所以任何人都可以说一旦启动器应用程序介入后发生了什么变化。

1 个答案:

答案 0 :(得分:0)

原来问题在于这条线而不是在dll中

CreateProcess( File, CmdLine, 0, 0, FALSE, DETACHED_PROCESS, 0, 0, &StartupInfo, &ProcInfo )

CmdLine变量可能在其中有一个空格,并且没有被包裹在“”中。

这导致命令行在链断裂中没有正确传递

ParseCommandLine(cmdInfo);    

并偶然参与了已发布的exe。

编辑:

这不能解决的问题是如果使用CoCreateInstance启动带有dll的exe,ParseCommandLine中的相同问题将返回。