본문 바로가기

Windows/MFC

dll에 Bitmap Resource 가져오기

DLL 에 있는 비트맵 리소스를 실행 파일로 가져오는 방법 3가지



1. FindResource() -> LoadResource() -> LockResource()

를 이용한 방법



① LoadLibrary() 를 이용해서 DLL 파일의 핸들값을 얻어온다.

    
[code]
HINSTANCE hDll = NULL;

hDll = LoadLibrary("ExportDll.dll");

if(hDll == NULL) {
     MessageBox("Can't ExportDll.dll", "ResourceDll", MB_OK);
     return;
}[/code]



② FindResource() -> LoadResource() -> LockResource() 와

     CBrush의 객체인 CreateDIBPatternBrush를 이용해서 출력.

[code]

HRSRC hRes;     // 비트맵 리소스 핸들


// 비트맵 리소스 핸들에 대한 글로벌 영역

HGLOBAL hData, hLockedData;
CBrush brush;



// 리소스 핸들을 얻어온다.
hRes = ::FindResource(hDll,

            MAKEINTRESOURCE(IDB_TOP_IMAGE), RT_BITMAP);

// 리소스 핸들 얻어오기에 성공했다면,
if(hRes != NULL) {



// LoadResource 와 LockResource 실행
if(((hData = ::LoadResource(hDll, hRes)) != NULL) &&

     ((hLockedData = (HGLOBAL)::LockResource(hData))

     != NULL)) {


         brush.CreateDIBPatternBrush(hLockedData,

                                                    DIB_RGB_COLORS);
         CBrush* pOldBrush = pDC->SelectObject(&brush);
         pDC->Rectangle(0, 0, 177, 47);
         pDC->SelectObject(pOldBrush);
         ::FreeResource(hLockedData);
     }
}
[/code]


=======================================================



2. CBitmap 객체의 멤머함수인 Attach 를 이용하는 방법



① LoadLibrary() 를 이용해서 DLL 파일의 핸들값을 얻어온다.

    
[code]
HINSTANCE hDll = NULL;

hDll = LoadLibrary("ExportDll.dll");

if(hDll == NULL) {
     MessageBox("Can't ExportDll.dll", "ResourceDll", MB_OK);
     return;
}

[/code]

② CBitmap 객체의 멤머함수인 Attach 를 이용



CBitmap객체.Attach(::LoadBitmap(hDll,

                     MAKEINTRESOURCE(IDB_TOP_IMAGE)));



=======================================================



3. CBitmap 객체의 멤머함수인 m_hObject 를 이용하는 방법



① LoadLibrary() 를 이용해서 DLL 파일의 핸들값을 얻어온다.

    
[code]
HINSTANCE hDll = NULL;

hDll = LoadLibrary("ExportDll.dll");

if(hDll == NULL) {
     MessageBox("Can't ExportDll.dll", "ResourceDll", MB_OK);
     return;
}
[/code]


② CBitmap 객체의 멤머함수인 m_hObject 를 이용


[code]
CBitmap객체.m_hObject = ::LoadBitmap(hDll,

                     MAKEINTRESOURCE(IDB_TOP_IMAGE)));
[/code]