पी/आह्वान घोषणाओं:UpdateResource स्ट्रिंग के रूप में lpType साथ काम नहीं करता
[DllImport("kernel32.dll")]
static extern bool UpdateResource(IntPtr hUpdate, IntPtr lpType, IntPtr lpName, ushort wLanguage, byte[] lpData, uint cbData);
[DllImport("kernel32.dll")]
static extern bool UpdateResource(IntPtr hUpdate, string lpType, int lpName, ushort wLanguage, byte[] lpData, uint cbData);
[DllImport("kernel32.dll")]
static extern IntPtr BeginUpdateResource(string pFileName, bool bDeleteExistingResources);
[DllImport("kernel32.dll")]
static extern bool EndUpdateResource(IntPtr hUpdate, bool fDiscard);
मेरे कोड:
var hUpdate = BeginUpdateResource(FilePath, false);
var BMP = File.ReadAllBytes(BmpPath);
UpdateResource(hUpdate, "2", 123, 1033, BMP, (uint)BMP.Length);
UpdateResource(hUpdate, "#2", 123, 1033, BMP, (uint)BMP.Length);
UpdateResource(hUpdate, "RT_BITMAP", 123, 1033, BMP, (uint)BMP.Length);
UpdateResource(hUpdate, "BITMAP", 123, 1033, BMP, (uint)BMP.Length);
EndUpdateResource(hUpdate, false);
ऊपर UpdateResource
कॉल में से कोई भी काम करते हैं। वे मौजूदा संसाधन को अद्यतन करने के बजाय #2, RT_BITMAP, BITMAP
नामक एक नए संसाधन प्रकार के तहत नया संसाधन जोड़ते हैं।
पी में/आह्वान UpdateResource
की घोषणा, अगर मैं IntPtr lpType
को string lpType
ओवरलोड और यह एक new IntPtr(2)
गुजरती हैं, सब कुछ काम करता है, लेकिन मैं इस समाधान का उपयोग करने के लिए है, क्योंकि कभी कभी मैं भी कस्टम संसाधन प्रकार और अधिक भार इच्छा के लिए string lpType
की जरूरत नहीं करना चाहती मेरे वर्तमान कोड डिज़ाइन में बहुत सारे बदलाव की आवश्यकता है।
MSDN:
lpType [में]
प्रकार: LPCTSTR
संसाधन प्रकार अद्यतन करने की। वैकल्पिक रूप से, सूचक के बजाय, यह पैरामीटर MAKEINTRESOURCE (ID) हो सकता है, जहां आईडी एक पूर्णांक मान पूर्वनिर्धारित संसाधन प्रकार का प्रतिनिधित्व करता है। यदि स्ट्रिंग का पहला अक्षर पाउंड साइन (#) है, तो शेष वर्ण दशमलव संख्या का प्रतिनिधित्व करते हैं जो संसाधन प्रकार के पूर्णांक पहचानकर्ता को निर्दिष्ट करता है। उदाहरण के लिए, स्ट्रिंग "# 258" का प्रतिनिधित्व करता पहचानकर्ता 258.
किसी भी विचार क्यों मैं lpType
एक स्ट्रिंग पारित करके मौजूदा बिटमैप अद्यतन नहीं कर सकते? मैं एमएसडीएन में जो कुछ कहा है, वही कर रहा हूं।
पुनश्च: मैं बिल्कुलlpType
एक स्ट्रिंग पारित करने के लिए की जरूरत है, कारण (वर्तमान कोड डिजाइन के लिए आवश्यक बहुत अधिक परिवर्तन) ऊपर कहा गया है की वजह से अधिक भार से IntPtr
उपयोग नहीं कर सकते।
हां मुझे पता है, प्रश्न से: 'ओवरलोडिंग को मेरे वर्तमान कोड डिज़ाइन में बहुत सारे बदलावों की आवश्यकता होगी।' क्या केवल एक स्ट्रिंग के साथ ऐसा करने का कोई तरीका नहीं है? ऐसे कई कारण हैं जिन्हें मैं स्पष्ट रूप से समझा नहीं सकता कि मैं इंटिप्टर का उपयोग क्यों नहीं कर सकता। – user3666697
एकमात्र संभव चीज जो आप गलत कर सकते हैं वह कोशिश नहीं कर रही है। –