8

У меня есть приложение для радио FM-тюнера в Silverlight 5 Вне браузера, который вызывает код из Native C++ DLL с моего USB-FM-приемника, используя PInvoke. Это приложение отлично работает в Windows 8 с Silverlight5.PInvoke в приложениях Metro с Windows 8/WinRT

Теперь я пытаюсь перенести его в приложение 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.

+1

Похоже, что в манифесте пакета отсутствует DLL. Текущие документы слишком неясны, чтобы дать хорошую ссылку. –

+0

Взгляните на этот вопрос: http://stackoverflow.com/questions/7807361/how-to-p-invoke-to-a-native-dll-from-metro –

+0

Звук подобный, но все еще не удачный ... –

ответ

5

По Pavel Minaev «s ответ на ответ Криса Пичман в:

P/Invoke и COM Interop наиболее безусловно поддерживается для приложений .NET Metro. Win32 API также поддерживается и может быть вызван с помощью вышеупомянутых технологий, хотя он ограничен теми функциями, которые доступны для приложений Metro (т. Е. Если приложение C++ Metro не может его вызывать, ни приложение .NET).

Morten Frederiksen Как указывает, что, однако, вероятно, что CarTFTFM.dll содержит неподдерживаемый часть поверхности API Win32 для WinRT:

только подмножество Win32 и COM API поддерживается: msdn.microsoft.com/en-us/library/windows/apps/br205757

1

Если это не является система DLL или иначе передвижной через системный путь, вы должны убедиться, что ваша DLL копируется в ту же папку, как приложение Metro развертываются в.

Я решил эту проблему, добавив родной DLL в мой проект приложения Metro, гарантируя, что Сложение Действие устанавливается на Материалы и Копировать в выходной каталог установлен в Copy Всегда или Копировать если новее.

 Смежные вопросы

  • Нет связанных вопросов^_^