2008-10-22 14 views
7

है मेरे पास एक WPF ऐप है जो Win +s/CLI का उपयोग करके बनाए गए Winforms उपयोगकर्ता नियंत्रण का उपयोग करता है। जब मेरा ऐप मेरी मुख्य विंडो के लिए एक्सएएमएल को पार्स करने के लिए जाता है, तो यह अपवाद फेंकता है। जानकारी कुछ हद तक संक्षिप्त प्रतीत होता है, लेकिन यह कहते हैं:डब्ल्यूपीएफ एक अपवाद पार्सिंग एक्सएएमएल फेंक रहा है जिसमें एक विनफॉर्म उपयोगकर्ता नियंत्रण

A first chance exception of type 'System.Windows.Markup.XamlParseException' occurred in PresentationFramework.dll 

Additional information: is not a valid Win32 application. (Exception from HRESULT: 0x800700C1) Error in markup file 'OsgViewer;component/osgviewerwin.xaml' Line 1 Position 9. 

मैं बाहर XAML में मेरी Winforms नियंत्रण और सब कुछ भार ठीक टिप्पणी की। मुझे लगा कि शायद मेरे नियंत्रण के लिए कन्स्ट्रक्टर कुछ खराब कर रहा है, इसलिए मैंने इसमें ब्रेकपॉइंट लगाया, लेकिन जब मैं ऐप चलाने के लिए ब्रेकपॉइंट सक्षम नहीं होता, और कभी हिट नहीं होता, जिसे मैं डीएलएल का मतलब समझता हूं उस रेखा को लोड नहीं किया गया है। जो डीएलएल में किसी प्रकार की ऑब्जेक्ट को तत्कालित किया जाता है, जब ऑब्जेक्ट के कन्स्ट्रक्टर का शरीर नहीं मिला, तो सबसे अधिक संभावना को फेंक दिया जा सकता है।

मैंने इसे अतीत में एक अलग परियोजना पर सफलतापूर्वक किया है, इसलिए मैंने उस ऐप से एक अलग WinForms उपयोगकर्ता नियंत्रण में खींच लिया, और इसे एक्सएएमएल में तुरंत चालू कर दिया, और यह सब ठीक काम करता है।

तो यह इस डीएलएल में कुछ है। मेरे डब्लूएलएफ सी # ऐप में डीएलएल का संदर्भ है, और जब मैं ऑब्जेक्ट ब्राउज़र में डीएलएल लोड करता हूं तो सभी आवश्यक वर्ग और नामस्थान ठीक दिखते हैं। ऐप ठीक से संकलित करता है, XAML को पार्स करते समय समस्या बस दिखाई देती है। किसी ने ऐसा कुछ देखा? इस बारे में कोई विचार क्या हो सकता है? इसे डिबग करने के लिए विचार? धन्यवाद!

<Window x:Class="OsgViewer.OsgViewerWin" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:int="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration" 
    xmlns:myns="clr-namespace:MyGlobalNS.MyNS;assembly=MyAssembly" 
... 
     <int:WindowsFormsHost x:Name="m_Host"> 
      <myns:CMyClass x:Name="m_MyClass" /> 
     </int:WindowsFormsHost> 
... 
</window> 

उत्तर

10

मुझे इस तरह की समस्याओं का सामना करना पड़ा है (लेकिन एक ही त्रुटि संदेश के साथ नहीं)। ऐसा लगता है जैसे डब्ल्यूपीएफ आपके विनफॉर्म उपयोगकर्ता नियंत्रण को चालू नहीं कर सकता है।

चुनौती यह जानना है कि क्यों। -

  • अगर वहाँ किसी भी निर्भरता अपने C++/CLI DLL जहां Winforms नियंत्रण है पता लगाएँ कि

    1. चेक, अगर आप को सक्षम किया अप्रबंधित डिबगिंग (> डीबग प्रोजेक्ट गुण में): यहाँ मेरी सुझाव है कि आप की कोशिश कर सकते हैं लागू किया गया और यदि उन निर्भरताओं को हल नहीं किया जा सकता है।
      देशी डीएलएल पर निर्भरताओं को जानने के लिए, आपको टूल Dependency Walker (depends.exe) का उपयोग करना चाहिए। .NET परावर्तक केवल प्रबंधित निर्भरताओं की जांच करेगा।
    2. चरण के अनुसार अपने Winforms उपयोगकर्ता नियंत्रण चरण के कोड को टिप्पणी करें और पुनः प्रयास करें।
    3. लोडर को चालू करने का प्रयोग करें Gflags.exe तस्वीरें (सीएफ Debugging LoadLibrary Failures)
  • +0

    प्रश्न, # 1 सक्षम होना चाहिए या नहीं ??? मेरे पास एक ही त्रुटि है और यह सक्षम नहीं है, क्या मुझे इसे सक्षम करना चाहिए? –

    +1

    @macrian: कुछ समय हो गया है क्योंकि मैंने अपना जवाब लिखा था, लेकिन मुझे लगता है कि आपको अप्रबंधित डीबगिंग सक्षम करना चाहिए। इस तरह, आप डीबगर में अधिक आउटपुट देखेंगे जो आपको समस्या को ट्रैक करने में मदद कर सकता है। – EFrank

    +0

    मुझे पता है, वास्तव में यह चार साल हो गया है: पी धन्यवाद आपकी मदद के लिए: डी –

    0

    मैं भी इस समस्या थी और सभी मैं करना था परियोजना गुण> सुरक्षा में जाने और क्लिक करें यह एक है था पूर्ण विश्वास आवेदन। मैंने फिर से अपनी परियोजना चलाई और यह काम किया!

    0

    क्या आप सुनिश्चित हैं कि आपके पास सिस्टम 32 फ़ोल्डर में या exe के साथ एक ही फ़ोल्डर में dll है। मुझे अलग-अलग फ़ोल्डर में डीएलएल स्थित होने पर सीएलआई डीएल के साथ निर्मित एक WPF प्रोजेक्ट चलाते समय एक ही त्रुटि संदेश मिला।

    माइक

    1

    मैं इस समस्या को देखा है जब बढ़ावा :: धागे का उपयोग करने की कोशिश कर रहा। थ्रेड-स्थानीय स्टोरेज का समर्थन करने के लिए, बूस्ट :: थ्रेड कुछ Win32 API कॉल बनाता है जो सीएलआई अनुप्रयोगों के साथ असंगत है। यदि आप सीएलआई कोड में धागे से कुछ शामिल करने का प्रयास करते हैं तो समस्या ट्रिगर हो जाती है।

    समाधान या तो बूस्ट :: थ्रेड का पूरी तरह से उपयोग करने से बचें या मूल कोड में .cpp फ़ाइलों में इसका उपयोग प्रतिबंधित करें।

    1

    मेरे पास सिमुलेशन के लक्षण थे और मेरी समस्या यह थी कि सी # प्रोजेक्ट को किसी भी CPU का उपयोग करने के लिए सेट किया गया था जबकि सी ++ प्रोजेक्ट x86 का उपयोग करने के लिए सेट किया गया था। X86 का उपयोग करने के लिए दोनों को हल करने के लिए समस्या

    0

    मेरे पास यह निष्पादन संदेश भी था, लेकिन मेरे समाधान XAML elments के क्रम को बदल रहे थे। मैं एक XmlDataProvider का उपयोग कर रहा था और एक सूची बॉक्स में सामग्री प्रदर्शित कर रहा था। मैं सिर्फ सूची बॉक्स से पहले XmlDataProvider डाल दिया।

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