Mam prostą aplikację Tuner radiowy FM w Silverlight 5 Poza przeglądarką, która wywołuje kod z Natywnej biblioteki DLL C++ z mojego odbiornika USB FM za pomocą PInvoke. Ta aplikacja działa bardzo dobrze w Windows 8 z Silverlight5.PInvoke w aplikacjach Metro z Windows 8/WinRT
Teraz próbuję przenieść go do aplikacji Metro za pomocą WinRT.
Migracja z Silverlight do XAML UI jest łatwa i działa dobrze. Sygnatury i atrybuty PInvoke zostały wykryte w porządku w przestrzeni nazw System.Runtime.InteropServices i atrybut DLLImport.
Problem polega na tym, że kiedy biegnę aplikację i wywołać dowolną metodę z rodzimym DLL PInvoked że wykorzystywane do pracy w mojej aplikacji SL5 (który działa dobrze nawet na Windows8), mam ten wyjątek:
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:
Moje pytanie brzmi, jaki jest problem w tym PInvoke? Ponieważ działa dobrze na Windows8 z aplikacją SL5, nie widzę żadnych powodów, aby mieć problemy z aplikacjami WinRT/Metro.
Wygląda na to, że w manifeście pakietu brakuje biblioteki DLL. Obecne dokumenty są zbyt niejasne, aby dać dobry link. –
Spójrz na to pytanie: http://stackoverflow.com/questions/7807361/how-to-p-invoke-to-a-ative-dll-from-metro –
Brzmi podobnie, ale wciąż nie ma sukcesu ... –