2012-05-21 6 views
-1

누군가 가짜 변수를 설명해 주시겠습니까? 정확히 WinMain 함수의 첫 번째 매개 변수는 무엇입니까?가짜 변수

GetStartupInfo(&StartupInfo); 
int nMainRetVal = WinMain((HINSTANCE)&__ImageBase, NULL, pszCommandLineAnsi, 
    (StartupInfo.dwFlags & STARTF_USESHOWWINDOW) 
     ? StartupInfo.wShowWindow : SW_SHOWDEFAULT); 

다음 문장은 무엇을합니까 ??

extern "C" const IMAGE_DOS_HEADER __ImageBase; 

답변

0

WinMain의 첫 번째 매개 변수는 소위 "응용 프로그램 인스턴스 핸들"입니다. 이 문제는 고대 Windows 3.x에서 유래되었으며 응용 프로그램의 실행중인 인스턴스에 대한 핸들을 나타냅니다. 그러나 Win32 (Windows 9x/NT)에서 시작하여이 매개 변수는 프로세스 가상 주소 공간에있는 실행 가능 모듈 매핑의 기본 주소입니다.

따라서 이미지베이스 주소는 __ImageBase이며 WinMain 서명을 충족하려면 HINSTANCE으로 변환됩니다.

이제 __ImageBase - 이미지 시작 주소에 정확히 위치하는 빌드 타임 생성 구조 인 것 같습니다.

그리고 "Pseudo Variable"이 무엇인지 확실하지 않습니다. 하지만 아마도 정확히 __ImageBase입니다.

0

__ImageBase는 "current module's HINSTANCE from a static library"입니다. 이것은 링커가 제공하는 소위 의사 변수입니다. 이 의사 변수는 모듈이 메모리에로드 된 주소입니다. 이 가상 변수를 사용하면 메모리에서 맵핑 된 이미지에 직접 액세스하여 해당 내용을 처리 할 수 ​​있습니다.