그래서이 DLL이 있고 AfxLoadLibrary를 사용하여 주 응용 프로그램에서 호출합니다. 그것은 모두 내가 그것을로드하고 함수를 호출하게 잘 작동합니다.AfxLoadLibrary/ParseCommandLine이 ERROR_NOACCESS와 함께 실패합니다.
이상한 비트입니다. 내 응용 프로그램이 먼저 실행 된 응용 프로그램이 더 이상 DLL을로드 할 수 없습니다
::CreateProcess(File, CmdLine, 0, 0, FALSE, DETACHED_PROCESS, 0, 0, &StartupInfo, &ProcInfo)
를 사용하여 다른 응용 프로그램에서 실행되는 경우
.
아무도 혼동하지 않도록 작은 다이어그램.
MainApplication ->의 DLL (모든 파인)
런처 -> MainApplication -> DLL (AfxLoadLibrary가 ERROR_NOACCESS 실패)
응용 프로그램과 DLL 모두 같은 디렉토리에 있습니다.
편집 :
조금 더 많은 정보를 얻을 수있었습니다. 실제로 ParseCommandLine에서 실패하는 dll 코드의이 비트입니다.
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
if (!ProcessShellCommand(cmdInfo))
return FALSE;
이 항목이 없으면 dll이 전혀로드되지 않으므로 실행 프로그램이 실행되면 변경된 내용을 누구든지 말할 수 있습니다.
이는 DLL의 시작 코드에서 액세스 위반을 나타냅니다. DLL 디버깅이 필요합니다. –
ParseCommandLine이 dll 시작 코드에 잘못되었습니다. 하지만 다른 exe에서 실행 된 exe에서로드 된 경우에만. – Saurbaum