У меня есть простое приложение FM Radio Tuner в Silverlight 5 вне браузера, которое вызывает код из собственной библиотеки C ++ DLL из моего USB FM-приемника с помощью PInvoke. Это приложение отлично работает в Windows 8 с Silverlight5.
Сейчас я пытаюсь перенести его в приложение Metro с помощью WinRT.
Переход с Silverlight на пользовательский интерфейс XAML довольно прост и прошел успешно. Сигнатуры и атрибуты PInvoke были обнаружены нормально с пространством имен System.Runtime.InteropServices и атрибутом DLLImport.
Проблема в том, что когда я запускаю приложение и вызываю любой метод из собственной библиотеки DLL PInvoked, которая раньше работала в моем приложении SL5 (которая отлично работает даже в Windows8), у меня возникает следующее исключение:
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:
Итак, у меня вопрос, в чем проблема с этим PInvoke? Поскольку он хорошо работает в Windows8 с приложением SL5, я не вижу причин для проблем с приложениями WinRT / Metro.