8

के साथ मेट्रो ऐप्स में PInvoke मेरे पास सिल्वरलाइट 5 में एक साधारण एफएम रेडियो ट्यूनर ऐप है जो ब्राउजर के बाहर अपने यूएसबी एफएम रिसीवर से मूल सी ++ डीएलएल से कोड कॉल करता है। यह एप्लिकेशन सिल्वरलाइट 5 के साथ विंडोज 8 में बहुत बढ़िया काम करता है।विंडोज 8/WinRT

अब मैं WinRT का उपयोग कर मेट्रो ऐप पर पोर्ट करने की कोशिश कर रहा हूं।

सिल्वरलाइट से एक्सएएमएल यूआई में माइग्रेशन बहुत आसान है और अच्छी तरह से काम करता है। PInvoke हस्ताक्षर और विशेषताओं को नेमस्पेस सिस्टम के साथ ठीक से पता चला था। रनटाइम.इंटरोप सर्विसेज और DLLImport विशेषता।

System.DllNotFoundException was unhandled by user code 
    Message=Unable to load DLL 'CarTFTFM.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E) 
    Source=metroradio 
    TypeName="" 
    StackTrace: 
     at MetroRadio.FMRadio.HWInit2(Int32 port, Int32 initVolume) 
     at MetroRadio.MediaService.InitializeRadio() in c:\Users\Gutemberg\Documents\Visual Studio 11\Projects\MetroRadio\MetroRadio\MediaService.cs:line 160 
     at MetroRadio.MainPage.radio_Click(Object sender, RoutedEventArgs e) in c:\Users\Gutemberg\Documents\Visual Studio 11\Projects\MetroRadio\MetroRadio\MainPage.xaml.cs:line 43 
    InnerException: 
:

समस्या यह है कि जब मैं अनुप्रयोग चल रहा हूँ और PInvoked देशी DLL कि मेरे SL5 एप्लिकेशन (जो भी Windows8 पर ठीक काम करता है) में काम करता था से किसी भी विधि कॉल, मैं इस अपवाद है

तो, मेरा सवाल है, इस PInvoke पर समस्या क्या है? चूंकि यह एसएल 5 ऐप के साथ विंडोज 8 पर अच्छा काम करता है, इसलिए मुझे WinRT/Metro Apps के साथ समस्याएं होने का कोई कारण नहीं दिखता है।

+1

डीएलएल की तरह लगता है पैकेज मैनिफेस्ट से गायब है। एक अच्छा लिंक देने के लिए वर्तमान दस्तावेज़ बहुत अस्पष्ट हैं। –

+0

इस प्रश्न पर एक नज़र डालें: http://stackoverflow.com/questions/7807361/how-to-p-invoke-to-a-native-dll-from-metro –

+0

ध्वनि समान लेकिन अभी भी कोई सफलता नहीं ... –

उत्तर

5

प्रति क्रिस Pietschmann के जवाब देने के लिए Pavel Minaev के जबाब के रूप में:

पी/आह्वान और COM इंटरॉप सबसे निश्चित रूप से नेट मेट्रो क्षुधा के लिए समर्थित हैं। Win32 एपीआई भी समर्थित है, और उपर्युक्त प्रौद्योगिकियों के माध्यम से बुलाया जा सकता है, हालांकि यह उन कार्यों तक ही सीमित है जो मेट्रो ऐप्स के लिए उपलब्ध हैं (यानी यदि कोई सी ++ मेट्रो ऐप इसे कॉल नहीं कर सकता है, न तो .NET ऐप भी हो सकता है)।

Win32 का केवल एक उपसमूह और COM एपीआई समर्थित है:: msdn.microsoft.com/en-us/library/windows/apps/br205757

Morten Frederiksen अंक बाहर के रूप में, यह हालांकि संभावना है कि CarTFTFM.dll WinRT के लिए Win32 एपीआई सतह की एक असमर्थित हिस्सा होता है

1

जब तक यह एक ऐसी प्रणाली है DLL या अन्यथा सिस्टम पथ के माध्यम से locatable है, तो आप सुनिश्चित करें कि आपके DLL के रूप में अपने मेट्रो आवेदन में तैनात किया जाता है उसी फ़ोल्डर में कॉपी किया जाता है बनाने की जरूरत है।

मैं अपने मेट्रो आवेदन परियोजना के मूल निवासी DLL जोड़कर समस्या हल हो, यह सुनिश्चित करना कि बिल्ड कार्रवाईसामग्री पर सेट है और आउटपुट निर्देशिका है कि कॉपी हमेशाकॉपी करने के लिए सेट या कॉपी करता है, तो है नया