純資源 DLL 是僅包含資源(標、位元影像、字串和對話方塊)的 DLL。使用純資源 DLL 是在多個程式之間共用同一組資源的好方法。提供其資源被針對多種語言進行本地化的應用程式也是一種好方法。若要建立純資源 DLL,請建立一個新的 Win32 DLL(非 MFC)項目,並將資源添加到此項目。
在“建立項目”對話方塊中選擇“Win32 項目”,並在“Win32 項目嚮導”中指定 DLL 項目類型。
為 DLL 建立一個包含資源(如字串或菜單)的新資源指令碼,並儲存該 .rc 檔案。如果該.rc檔案包含位元影像用記事本開啟它,可以看到下面這樣的一段
DIB_BKGD_HF BITMAP "bkgd_**.bmp"
DIB_BKGD_GT BITMAP "bkgd_***.bmp"
DIB_BKGD_BF BITMAP "bkgd_*****.bmp"
這些就是針對位元影像的申明,將相應的位元影像添加到這個裡面就行了。
在“項目”菜單上單擊“添加現有項”,然後在項目中插入這個新的 .rc 檔案。
指定 /NOENTRY 連結器選項。/NOENTRY 防止連結器將 _main 引用連結到 DLL 中;此選項是建立純資源 DLL 所必需的。
產生 DLL。
使用純資源 DLL 的應用程式應調用 LoadLibrary 來顯式連結到 DLL。若要訪問資源,請調用一般函數 FindResource 和 LoadResource,這兩個函數對任何類型的資源都有效,或調用下列資源特定的函數之一:
FormatMessage
LoadAccelerators
LoadBitmap
LoadCursor
LoadIcon
LoadMenu
LoadString
使用完資源後,應用程式應調用 FreeLibrary。
下面部份是說明一下資源中的BMP如何動態載入並顯示
hmodule = LoadLibrary("ExtendDLL.dll");
HDC m_hdcMem;
m_hdcMem = CreateCompatibleDC(hdc);
BITMAP bm;
RECT rect;
HBITMAP hBitmap = LoadBitmap(hmodule,"DIB_BKGD_HF"); //MAKEINTRESOURCE(IDB_BITMAP1)
//HBITMAP hBitmap = ( HBITMAP )LoadImage( hmodule, "DIB_BKGD_HF",IMAGE_BITMAP,0,0,LR_DEFAULTSIZE);
GetObject( hBitmap, sizeof BITMAP, &bm);
SelectObject( m_hdcMem, hBitmap);
GetClientRect( hWnd, &rect);
//::SetStretchBltMode(hdc,COLORONCOLOR);
//::StretchBlt(hdc, rect.left, rect.top, rect.right, rect.bottom, m_hdcMem, 0, 0, bm.bmWidth, bm.bmHeight,SRCCOPY);
BitBlt(hdc,0,0,bm.bmWidth,bm.bmHeight,m_hdcMem,0,0,SRCCOPY);
ReleaseDC( hWnd, m_hdcMem );
FreeLibrary(hmodule);