2009-12-15 21 views
6

क्या सी ++ के लिए एक प्लेटफार्म स्वतंत्र संसाधन प्रणाली है जो क्यूटी के साथ आता है (लेकिन क्यूटी निर्भरता के बिना)?प्लेटफार्म स्वतंत्र संसाधन प्रणाली (क्यूटी संसाधन प्रणाली की तरह)

मैं अपने सी ++ स्रोत कोड के भीतर से मनमाना डेटा तक पहुंचना चाहता हूं। यही है, न केवल आइकन बल्कि अनुवाद या शेडर्स, आदि

वैकल्पिक रूप से कुछ प्रकार की आभासी फ़ाइल सिस्टम लाइब्रेरी तक पहुंचने के लिए एक ज़िप संपीड़ित फ़ाइल या ऐसी मेरी आवश्यकताओं को भी फिट करेगी।

+0

क्या आपके निष्पादन योग्य में संसाधनों को एम्बेड किया जाना चाहिए? यदि नहीं, तो फाइलों को स्टोर करने के लिए SQLite का उपयोग करने वाला कोई अन्य पथ हो सकता है - इस हल्के डेटाबेस के साथ उठना और चलाना बहुत अधिक प्रयास नहीं होगा। – Rob

+0

इसी प्रकार: http://stackoverflow.com/questions/549031/how-do-you-include-images-as-resources-in-a-c-executable – Rob

उत्तर

8

मैंने सी ++ वेब सर्वर प्रोजेक्ट के लिए अपना खुद का सिस्टम लॉन्च किया जो मूल रूप से फाइलों (एचटीएमएल, सीएसएस, जेएस, पीएनजी, इत्यादि) का एक गुच्छा ले गया और सी ++ हेडर बनाए जिसमें static const char* के रूप में एन्कोड किए गए डेटा शामिल थे। मैं फिर #include उन शीर्षलेखों जहां मुझे डेटा तक पहुंच की आवश्यकता है। ऐप जो 'संसाधन' फ़ाइलों को एन्कोड करता है, पूर्व-निर्माण चरण के रूप में निष्पादित करता है। संसाधन शीर्षलेख बनाने के लिए एन्कोडिंग ऐप ने स्वयं boost::filesystem का उपयोग किया, इसलिए विंडोज/* निक्स पर काम करता है।

एक ठेठ संसाधन फ़ाइल इस प्रकार दिखाई देंगे:

namespace resource 
{ 
    // Generated from mainPage.htm 
    static const char* mainPage_[] = 
    { 
    "<html>...</html>" 
    }; 
} 

द्विआधारी सामग्री के लिए मैं \x अंकन का उपयोग सांकेतिक शब्दों में बदलना। मैं डेटा को लाइन-रैप करना भी सुनिश्चित करता हूं ताकि यह एक संपादक में पठनीय हो।

मुझे कुछ समस्याएं थीं - एमएस कंपाइलर static const char* को 64 केबी से बड़ा होने की अनुमति नहीं देता जो कि पिटा था। सौभाग्य से इस से बड़ी फाइलें जावास्क्रिप्ट फाइलें थीं जिन्हें मैं आसानी से छोटे हिस्सों में विभाजित कर सकता था - हालांकि बड़ी छवियां एक समस्या होगी।

+0

और आप ऐसा क्यों करेंगे? –

+4

क्योंकि मुझे क्रॉस-प्लेटफॉर्म क्यूटी-जैसी संसाधन प्रणाली नहीं मिल सका, यही कारण है कि। मैंने सवाल एक समझदार जवाब दिया और आपने मुझे वोट दिया? धन्यवाद! – Rob

0

हम इसके लिए ICU ResourceBundle एस का उपयोग कर रहे हैं और इससे काफी संतुष्ट हैं।

pkgdata tool का उपयोग करके, संसाधनबंडल का पैकेजिंग बहुत लचीला है: एक साझा लाइब्रेरी, स्थैतिक पुस्तकालय, या आईसीयू द्वारा स्मृति-मैप किए जा सकने वाली फ़ाइलों के रूप में।

0

मैंने उन्हें बाइनरी ब्लॉब के रूप में लिंक समय पर निष्पादन योग्य के अंत में पैच किया है। पिछले 4 बिट्स पिछले ब्लॉक के आकार के साथ हैं और फिर प्रोग्राम ने पूंछ से डेटा आइटम पढ़ा है।

एक और तरीका यदि आपको अधिक फाइल सिस्टम प्रकार की संरचना की आवश्यकता है (हालांकि मैंने इसे आजमाया नहीं है) तो सब कुछ एक ज़िप फ़ाइल में रखना होगा और अंत में इसे जोड़ना होगा। फिर आपको अतिरिक्त डेटा के कुछ आसानी से खोजने योग्य आकार की आवश्यकता होगी।

संबंधित मुद्दे