MFC 에서 CreateProcess() 를 사용해서 외부 프로그램을 실행하는데, 이상하게 Access Violation 이 일어났다.
아무리 뒤져봐도 메모리 오염이 없어서, 뭘까 하고 찾아보다가
혹시나 해서 검색해봤더니, 의외로 StockOverflow 에서 해답을 내려 주셨다.
http://stackoverflow.com/questions/11339186/createprocess-fails-with-an-access-violation 를 참고하면 되고,
이건 좀 설명이 필요해서, 앞뒤를 다 적는다.
CreateProcess() 의 테스트 코드 사용할때에, 실행하는 명령행 전달 ( 두 번째 인자 ) 를 아래와 같이 사용했었다.
1. 실행하는 명령행 전달값을 static 으로 주면 에러난다. 예를 들어.
CreateProcess( ..., L"cmd.exe", ... );
이러면 에러난다. Access Violation.
2. 변수로 주면 문제없다. 예를 들어,
TCHAR tcmdstr[128] = TEXT("notepad.exe");
CreateProcess( ..., tcmdstr, ... );
이러면 정상작동.
좀 의외긴 한데, CreateProcess() 함수가 원래 이렇게 만들어져 있다니, 딱히 할 말은 없다.
MSDN 의 함수 인자값 설명과 예제는
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682512(v=vs.85).aspx
를 참고하면 된다.
'프로그램' 카테고리의 다른 글
MFC 의 CreateProcess() 를 테스트 할 때, "dir" 등등의 dos command 로 테스트 하지 말아라. (0) | 2015.07.23 |
---|---|
C# 의 Socket 객체에는 close() 말고도 disconnect(), shutdown() 이 있다. (0) | 2015.07.22 |
님들 그거 앎? GDI+ 로 JPEG 압축률 지정 가능. (0) | 2015.06.29 |
포인터가 궁금할 땐, 글로 읽자. (0) | 2015.06.27 |
Visual Studio 에서 “LoaderLock was detected” 어쩌구 저쩌구 에러 (0) | 2015.06.25 |