Ho una semplice app Radio Tuner FM in Silverlight 5 Out-of-browser che chiama il codice da una DLL nativa C++ dal mio ricevitore FM USB utilizzando PInvoke. Questa applicazione funziona molto bene in Windows 8 con Silverlight5.PInvoke in Metro App con Windows 8/WinRT
Ora sto provando a portarlo su una Metro App utilizzando WinRT.
La migrazione da Silverlight a XAML UI è piuttosto semplice e ha funzionato bene. Le firme e gli attributi di PInvoke sono stati rilevati correttamente con lo spazio dei nomi System.Runtime.InteropServices e l'attributo DLLImport.
Il problema è che quando sono in esecuzione l'applicazione e chiamare qualsiasi metodo dal DLL nativa PInvoked che utilizzate per lavorare nella mia app SL5 (che funziona bene anche su Windows8), ho questa eccezione:
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:
Quindi, la mia domanda è, qual è il problema su questo PInvoke? Dal momento che funziona bene su Windows8 con un'app SL5, non vedo alcun motivo per avere problemi con le app WinRT/Metro.
Suona come la DLL non è presente il manifesto del pacchetto. I documenti attuali sono troppo oscuri per dare un buon collegamento. –
Date un'occhiata a questa domanda: http://stackoverflow.com/questions/7807361/how-to-p-invoke-to-a-native-dll-from-metro –
suono simile, ma ancora senza successo ... –