1. hWnd를 알면, 그걸로 hInstance를 얻어올 수 있습니다.
GetWindowLong / GetWindowLongPtr에서 GWLP_HINSTANCE
2. AfxGetApp() 를 통해서 App 의 포인터를 얻어온 다음에 m_instance 멤버변수
3. HINSTANCE hInst= GetModuleHandle(NULL); 콘솔에서 윈도 뛰울때 자주 씁니다.
4. HINSTANCE AfxGetInstanceHandle( );
5. dll의 메모리를 이용한 HINSTANCE 구하기
종종 DLL 내부에서 window를 띄워야하시겠다는 분이 있어서 찾던중에
Detecting a HMODULE/HINSTANCE Handle Within the Module You're Running In
이라는 codeguru 글을 보았습니다.
http://www.codeguru.com/Cpp/W-P/dll/tips/article.php/c3635/
코드는
#if _MSC_VER >= 1300 // for VC 7.0
// from ATL 7.0 sources
#ifndef _delayimp_h
extern "C" IMAGE_DOS_HEADER __ImageBase;
#endif
#endif
HMODULE GetCurrentModule()
{
#if _MSC_VER < 1300 // earlier than .NET compiler (VC 6.0)
// Here's a trick that will get you the handle of the module
// you're running in without any a-priori knowledge:
// http://www.dotnet247.com/247reference/msgs/13/65259.aspx
MEMORY_BASIC_INFORMATION mbi;
static int dummy;
VirtualQuery( &dummy, &mbi, sizeof(mbi) );
return reinterpret_cast<HMODULE>(mbi.AllocationBase);
#else // VC 7.0
// from ATL 7.0 sources
return reinterpret_cast<HMODULE>(&__ImageBase);
#endif
}
위와 같은데.
간단히 설명하면 메모리에 할당된 dll정보를 읽어와서
HMODULE위치를 리턴해줍니다.
현재 win 9x 및 nt계열에서는 동작하는데 추후에 할당된 메모리 레이아웃이
아주 대폭적으로 바뀌면 돌아가지 않을수도 있겠죠.
첨부파일은 dll에서 window 생성하는 코드 입니다.
[출처] MFC에서 hInstance 얻기|작성자 에쑤비
'IT-개발,DB' 카테고리의 다른 글
[개발,MFC] 숫자를 문자열 로 문자열을 숫자로 상호 변환 (0) | 2011.09.22 |
---|---|
[개발/VC] 맵(Map)클래스 사용법 (0) | 2011.09.22 |
[개발/MFC] 중복실행 방지하기 (0) | 2011.09.20 |
[개발/MFC] GetLastError(), System Error Codes (0-999) (0) | 2011.09.20 |
[개발/VC] IERefreshElevationPolicy() 함수 인터넷 익스플로러 보호모드에서 (0) | 2011.09.20 |
댓글