Tengo una sencilla aplicación de sintonizador de radio FM en Silverlight 5 fuera del navegador que llama al código de una DLL C++ nativa desde mi receptor USB FM utilizando PInvoke. Esta aplicación funciona muy bien en Windows 8 con Silverlight5.PInvoke en aplicaciones de Metro con Windows 8/WinRT
Ahora intento portarlo a una aplicación de Metro usando WinRT.
La migración de Silverlight a XAML UI es bastante fácil y funcionó bien. Las firmas y los atributos de PInvoke se detectaron correctamente con el espacio de nombres System.Runtime.InteropServices y el atributo DLLImport.
El problema es que cuando estoy corriendo la aplicación y llamar a cualquier método de la DLL nativa PInvoked que solía trabajar en mi aplicación SL5 (que funciona bien incluso en Windows8), tengo esta excepción:
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:
Entonces, mi pregunta es, ¿cuál es el problema en este PInvoke? Dado que funciona bien en Windows8 con una aplicación SL5, no veo ningún motivo para tener problemas con WinRT/Metro Apps.
Parece que la DLL no se encuentra en el manifiesto del paquete. Los documentos actuales son demasiado oscuros para dar un buen enlace. –
Eche un vistazo a esta pregunta: http://stackoverflow.com/questions/7807361/how-to-p-invoke-to-a-native-dll-from-metro –
Sonido similar pero aún sin éxito ... –