Tôi có một ứng dụng FM Radio Tuner đơn giản trong Silverlight 5 Out-of-browser gọi mã từ một Native C++ DLL từ USB FM Receiver của tôi bằng PInvoke. Ứng dụng này hoạt động rất tốt trong Windows 8 với Silverlight5.PInvoke trong Metro Apps với Windows 8/WinRT
Bây giờ tôi đang cố gắng chuyển nó đến Ứng dụng Metro bằng cách sử dụng WinRT.
Việc di chuyển từ giao diện người dùng Silverlight sang XAML khá dễ dàng và hoạt động tốt. Các chữ ký PInvoke và các thuộc tính đã được phát hiện tốt với không gian tên System.Runtime.InteropServices và thuộc tính DLLImport.
Vấn đề là khi tôi đang chạy App và gọi bất kỳ phương pháp từ DLL bản địa PInvoked rằng đã từng làm việc trong ứng dụng SL5 của tôi (mà hoạt động tốt ngay cả trên Windows8), tôi có ngoại lệ này:
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:
Vì vậy, câu hỏi của tôi là, vấn đề trên PInvoke này là gì? Kể từ khi nó hoạt động tốt trên Windows8 với một ứng dụng SL5, tôi không thấy bất kỳ lý do để có vấn đề với WinRT/Metro Apps.
Âm thanh như DLL bị thiếu trong tệp kê khai gói. Tài liệu hiện tại quá tối nghĩa để cung cấp liên kết tốt. –
Hãy xem câu hỏi này: http://stackoverflow.com/questions/7807361/how-to-p-invoke-to-a-native-dll-from-metro –
Âm thanh tương tự nhưng vẫn không thành công ... –