2009-10-23 7 views
7

में टास्कडिअलॉग का उपयोग करते समय EntryPointNotFoundException मैं टास्कडिअलॉग को कॉल करने के लिए निम्न कोड का उपयोग कर रहा हूं।सी #

[DllImport("ComCtl32", CharSet = CharSet.Unicode, PreserveSig = false)] 
    internal static extern void TaskDialogIndirect(
     [In] ref TASKDIALOGCONFIG pTaskConfig, 
     [Out] out int pnButton, 
     [Out] out int pnRadioButton, 
     [Out] out bool pfVerificationFlagChecked); 

हालांकि, मैं अपवाद "DLL 'ComCtl32' में 'TaskDialogIndirect' नामक एक प्रवेश बिंदु ढूँढने में असमर्थ।"

मैंने this code लिया। मैं विंडोज 7 एक्स 64 (आरसी) का उपयोग कर रहा हूँ।

मैं क्या गलत कर रहा हूं? इस probem पक्ष विधानसभाओं से कंधा मिलाकर साथ करना था: इस छोड़कर

उत्तर

8

कुछ भी नहीं

अद्यतन एक विस्टा सुविधा है संगतता कारणों के लिए, इन कार्यों केवल comctl32.dll संस्करण 6 में मौजूद हैं, लेकिन, विस्टा लोड होगा एक पुराना संस्करण जब तक कि आप इसे अन्यथा नहीं बताते। अधिकांश लोगों (मेरे समेत) दृष्टिकोण एक मैनिफेस्ट का उपयोग करना है। यह मुश्किल साबित हुआ है, और हो सकता है कि वैसे भी सही समाधान न हो, विशेष रूप से यदि आप जो लिख रहे हैं वह एक पुस्तकालय है: आप जरूरी नहीं कि पूरे एप्लिकेशन को सामान्य नियंत्रणों का उपयोग करने के लिए मजबूर करना पड़े। 6.

दाएं समाधान केवल Vista-only API में से किसी एक को कॉल करते समय new activation संदर्भ को धक्का देना है। सक्रियण संदर्भ अकेले शेष एप्लिकेशन को छोड़ते समय comctl32.dll के सही संस्करण का उपयोग करेगा, और कोई मेनिफेस्ट आवश्यक नहीं है।

सौभाग्य से, यह करना आसान है। कुछ पूर्ण कोड जो पहले से मौजूद हैं MS Knowledgebase। लेख से कोड (केबी 830033) चाल है जैसा कि है।

वैकल्पिक प्रबंधित API: Vista के TaskDialog & के लिए एक पूर्ण आवरण TaskDialogIndirect यहां पाया जा सकता:

'VistaBridge नमूना लाइब्रेरी' डाउनलोड http://code.msdn.microsoft.com/VistaBridge से:

http://code.msdn.microsoft.com/WindowsAPICodePack

WPF के लिए निम्नलिखित का उपयोग एक बार डाउनलोड हो जाने पर, प्रोजेक्ट खोलें और फिर इसे बनाएं (यदि आप सभी कोड देखना चाहते हैं, तो \ पुस्तकालय या \ इंटरऑप फ़ोल्डरों में फ़ाइलों की जांच करें)। अब आप VistaBridge \ bin \ debug \ से DLL ले सकते हैं और अपनी प्रोजेक्ट में इसका एक संदर्भ जोड़ सकते हैं, साथ ही आपको प्रत्येक अलग VistaBridge मॉड्यूल के लिए एक उपयोग कथन जोड़ना होगा। उदाहरण के लिए:

माइक्रोसॉफ्ट.SDK.Samples.VistaBridge.Interop या library या .Properties या.Services का उपयोग कर। आपकी आवश्यकताओं के आधार पर।

VistaBridge प्रोजेक्ट में कई अन्य Vista सुविधाओं (जैसे टास्कडिअलॉग, विस्टा ओपनफाइल और सेवफाइल डायलॉग, और निश्चित रूप से एयरो ग्लास इफेक्ट्स) के लिए एपीआई शामिल है, इन्हें देखने के लिए Vista Vista परियोजना चलाएं।

+0

इसे Win7 में हटा दिया गया था? –

+0

धन्यवाद, मैं इसे देख लूंगा। – Vivelin

+0

VistaBridge विंडोज एपीआई कोड पैक बन गया। –

3

कार्य संवाद के उपयोग के लिए विंडोज़ सामान्य नियंत्रण डीएलएल (ComCtl32.dll) के संस्करण 6 की आवश्यकता है! संगतता कारणों के लिए, एप्लिकेशन डिफ़ॉल्ट रूप से इस संस्करण से बंधे नहीं हैं। एक तरीका यह संस्करण 6 के लिए बाध्य करने के लिए निम्न सामग्री के साथ अपने निष्पादन योग्य (YourAppName.exe.manifest नाम) के साथ एक मैनिफ़ेस्ट फ़ाइल जगह, है:

<dependency> 
    <dependentAssembly> 
     <assemblyIdentity 
      type="win32" 
      name="Microsoft.Windows.Common-Controls" 
      version="6.0.0.0" 
      processorArchitecture="*" 
      publicKeyToken="6595b64144ccf1df" 
      language="*" 
     /> 
    </dependentAssembly> 
    </dependency> 

यह प्रकट भी अपने निष्पादन के अंदर एक Win32 संसाधन के रूप में जोड़ा जा सकता है (RT_MANIFEST और आईडी के साथ 1 सेट के साथ), यदि आप अतिरिक्त स्टैंडअलोन फ़ाइल नहीं चाहते हैं। यदि आप अपनी प्रोजेक्ट की गुणों में अपनी मेनिफेस्ट फ़ाइल को जोड़ते हैं तो विजुअल स्टूडियो आपके लिए यह काम कर सकता है।