我有一个使用 Silverlight 5 Out-of-browser 制作的简单 FM 收音机调谐器应用程序,通过 PInvoke 调用我的 USB FM 接收器的 Native C++ DLL 中的代码。这个应用在 Windows 8 上与 Silverlight5 上运行得非常好。
现在我正在尝试将其移植到使用 WinRT 的 Metro 应用中。
从 Silverlight 到 XAML UI 的迁移相当容易且顺利。PInvoke 签名和属性可以使用 System.Runtime.InteropServices 命名空间和 DLLImport 属性进行正确检测。
问题是,在我运行应用并调用任何在我的 SL5 应用程序中正常工作(即使在 Windows8 上也能正常工作)的 PInvoked native DLL 方法时,我会遇到异常:
现在我正在尝试将其移植到使用 WinRT 的 Metro 应用中。
从 Silverlight 到 XAML UI 的迁移相当容易且顺利。PInvoke 签名和属性可以使用 System.Runtime.InteropServices 命名空间和 DLLImport 属性进行正确检测。
问题是,在我运行应用并调用任何在我的 SL5 应用程序中正常工作(即使在 Windows8 上也能正常工作)的 PInvoked native 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有什么问题?因为它在Windows 8上与SL5应用程序一起运行良好,我看不出在WinRT / Metro应用程序中有任何问题的理由。