2010-02-08 4 views
8

리소스 DLL을 어떻게 만듭니 까? dll은 .png 파일 세트를 갖습니다. 이러한 .png 파일은 dll에서 노출되어야합니다. 내 응용 프로그램은이 dll을 참조하여 .png 파일을 가져와야합니다.리소스 DLL을 만드는 방법

답변

17

리소스 dll은 다른 dll과 동일하며 코드가 거의없고 리소스가 상대적으로 많습니다.

Microsoft는 PNG 파일에 대한 사전 정의 된 자원 유형을 가지고 있지 않지만, 당신이 정의 할 수 있습니다 자신의

가장 최소한의 가능한 리소스 DLL이 같은 링커에 전달 단지 컴파일 .RC 파일입니다.

//save this as resources.rc (supply your own .png file) 

#define RT_PNG 99 

#define ID_DIGG 1 

ID_DIGG RT_PNG "image\\digg.png" 


그런 다음 명령 프롬프트에서 다음 명령을 실행합니다.

rc resources.rc 
link /dll /noentry /machine:x86 resources.res 

그 것이다. 첫 번째 명령은 resources.rc를 resources.res로 컴파일합니다. 두 번째 명령은 resources.res를 dll로 변환합니다.

이제 단일 png 파일을 포함하는 resources.dll이라는 dll이 생겼습니다. 물론 실제로는 dll을 사용하는 코드와 공유하는 헤더 파일에 #defines을 넣어야합니다.

C++에서 dll을 사용하려면 코드가 다음과 비슷할 것입니다.

#define RT_PNG MAKEINTRESOURCE(99) 
#define ID_DIGG MAKEINTRESOURCE(1) 

HMODULE hMod = LoadLibraryEx("resources.dll", NULL, LOAD_LIBRARY_AS_DATAFILE); 
if (NULL != hMod) 
{ 
    HRSRC hRes = FindResource(hMod, RT_PNG, ID_DIGG); 
    if (NULL != hRes) 
    { 
     HGLOBAL hgbl = LoadResource(hMod, hRes) 
     void * pPng = LockResource(hgbl); 
     UINT32 cbPng = SizeofResource(hMod, hRes); 

     // pPng now points to the contents of your your .png file 
     // and cbPng is its size in bytes 

    } 

    // Don't free the library until you are done with pPng 
    // FreeLibrary(hMod); 
} 
+0

와우 ... 감사합니다. 많이 ..이 유용한 정보처럼 보입니다. –

+0

이 기술을 사용하여 실시간으로 내 자체 제작 된 IE 툴바 버튼의 아이콘을 변경할 수 있습니까? – karikari

+1

@karikari : 나는 그렇게 생각하지 않는다. 이 기술이 실시간 변경에 어떻게 도움이되는지는 알 수 없습니다. DLL의 리소스는 링크 타임에 정의되며 동적이지 않습니다. –

관련 문제