2010-02-08 10 views
8

कैसे बना सकता हूं मैं संसाधन डीएल कैसे बना सकता हूं? डीएलएल में .png फ़ाइलों का एक सेट होगा। एक तरह से इन .png फ़ाइलों को डीएलएल से उजागर किया जाना चाहिए। एक .png फ़ाइल प्राप्त करने के लिए मेरे एप्लिकेशन को इस डीएलएल को संदर्भित करने की आवश्यकता होगी।मैं संसाधन डीएल

उत्तर

17

एक संसाधन डीएल किसी भी अन्य डीएल के समान है, इसमें इसमें बहुत कम या कोई कोड नहीं है, और अपेक्षाकृत अधिक संसाधन हैं।

माइक्रोसॉफ्ट PNG फ़ाइलें के लिए एक पूर्वनिर्धारित संसाधन प्रकार नहीं है, लेकिन आप को परिभाषित कर सकते अपनी खुद की

सबसे कम से कम संभव संसाधन dll सिर्फ एक संकलित आर सी इस तरह लिंकर को पारित कर दिया फ़ाइल है।


//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 

यह है। पहला कमांड resource.res में resource.rc संकलित करता है दूसरा कमांड संसाधनों को एक डीएल में बदल देता है।

अब आपके पास resources.dll नामक एक डीएल होना चाहिए जिसमें एक एकल पीएनजी फ़ाइल हो। अभ्यास में, निश्चित रूप से, आप #defines को हेडर फ़ाइल में रखना चाहते हैं जिसे आप डीएल का उपयोग करने वाले कोड के साथ साझा करते हैं।

सी ++ में डीएलएल का उपयोग करने के लिए, आपका कोड ऐसा कुछ दिखाई देगा।

#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

वाह ... धन्यवाद एक lot..this, एक उपयोगी जानकारी :) –

+0

इस तकनीक का उपयोग करके की तरह दिखता है मैं वास्तविक समय में अपने स्वयं बनाया IE उपकरण पट्टी बटन का आइकन बदल सकता हूँ? – karikari

+1

@karikari: मुझे ऐसा नहीं लगता है। मैं नहीं कर सकता कि यह तकनीक वास्तविक समय में बदलावों के साथ कैसे मदद करती है। डीएलएल में संसाधन लिंक समय पर परिभाषित किए जाते हैं, वे गतिशील नहीं होते हैं। –