我在Silverlight 5中有一個簡單的FM收音機調諧器應用程序,它使用PInvoke從我的USB FM接收器調用本機C++ DLL中的代碼。此應用程序在Windows 8和Silverlight5中運行得非常好。使用Windows 8/WinRT在Metro應用程序中啓用
現在我試圖使用WinRT將它移植到Metro應用程序。
從Silverlight到XAML UI的遷移非常簡單,並且運行良好。使用命名空間System.Runtime.InteropServices和DLLImport屬性可以很好地檢測到PInvoke簽名和屬性。
的問題是,當我運行應用程序並調用從使用在我的SL5的應用程序(甚至在Windows8中正常工作)工作PInvoked本地DLL的任何方法,我有這樣的例外:
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應用程序出現問題的原因。
包聲明中缺少聲音,如DLL。當前的文檔太模糊,無法提供良好的鏈接。 – 2012-01-16 15:09:45
看看這個問題:http://stackoverflow.com/questions/7807361/how-to-p-invoke-to-a-native-dll-from-metro – 2012-01-16 15:26:30
聲音相似,但仍然沒有成功... – 2012-01-16 15:50:54