2012-10-05 4 views
0

그래서이 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이 전혀로드되지 않으므로 실행 프로그램이 실행되면 변경된 내용을 누구든지 말할 수 있습니다.

+0

이는 DLL의 시작 코드에서 액세스 위반을 나타냅니다. DLL 디버깅이 필요합니다. –

+0

ParseCommandLine이 dll 시작 코드에 잘못되었습니다. 하지만 다른 exe에서 실행 된 exe에서로드 된 경우에만. – Saurbaum

답변

0

문제가 잠재적에 공백을 가질 수이 라인이 아닌 DLL

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

있는 CmdLine 변수에 있었고 ""에 싸여되지되었다 밝혀졌습니다. 명령 줄이

ParseCommandLine(cmdInfo);  

을 깨는 체인에서 제대로 통과 우연히되지 발생

실행 된 EXE에서 일했다.

편집 :

는 DLL과 EXE가 ParseCommandLine 반환에 CoCreateInstance를에게 같은 문제를 사용하여 시작하는 경우 이러한 것이 해결되지 않는 것은.

+0

아마도 이와 관련이 있습니다. http://www.codeproject.com/Messages/2714127/Re-ParseCommandLine-question.aspx – W1M0R

관련 문제