PInvoice in Metro Apps mit Windows 8 / WinRT

8

Ich habe eine einfache FM-Radio-Tuner-App in Silverlight 5 Out-of-Browser, die Code aus einer nativen C ++ - DLL von meinem USB-FM-Empfänger mit PInvoke aufruft. Diese Anwendung funktioniert sehr gut in Windows 8 mit Silverlight5.

Jetzt versuche ich es mit WinRT in eine Metro App zu portieren.

Die Migration von Silverlight zu XAML UI ist ziemlich einfach und funktionierte gut. Die PInvoke-Signaturen und -Attribute wurden ordnungsgemäß mit dem Namespace System.Runtime.InteropServices und dem DLLImport-Attribut erkannt.

Das Problem ist, dass, wenn ich die App ausführen und eine Methode aus der pInvoked nativen DLL aufrufen, die in meiner SL5-App funktioniert (das funktioniert sogar unter Windows8), habe ich diese Ausnahme:

%Vor%

Also, meine Frage ist, was ist das Problem an diesem PInvoke? Da es unter Windows8 mit einer SL5-App gut funktioniert, sehe ich keine Gründe für Probleme mit WinRT / Metro Apps.

    
Gutemberg Ribeiro 16.01.2012, 14:23
quelle

2 Antworten

5

Nach Antworten von Pavel Minaev auf Chris Pietschmanns Antwort:

  

P / Invoke und COM Interop werden mit Sicherheit für .NET Metro Apps unterstützt. Die Win32-API wird ebenfalls unterstützt und kann über die oben genannten Technologien aufgerufen werden. Sie ist jedoch auf die Funktionen beschränkt, die für Metro-Apps verfügbar sind (dh wenn eine C ++ Metro-App sie nicht aufrufen kann, auch keine .NET-App) / p>

Wie Morten Frederiksen darauf hinweist, ist es jedoch wahrscheinlich, dass CarTFTFM.dll einen nicht unterstützten Teil des Win32 enthält API-Oberfläche für WinRT:

  

Nur eine Teilmenge der Win32- und COM-API wird unterstützt: msdn.microsoft.com/de-de us / library / windows / apps / br205757

    
David Cuccia 20.08.2012 20:07
quelle
1
___ qstntxt ___

Ich habe eine einfache FM-Radio-Tuner-App in Silverlight 5 Out-of-Browser, die Code aus einer nativen C ++ - DLL von meinem USB-FM-Empfänger mit PInvoke aufruft. Diese Anwendung funktioniert sehr gut in Windows 8 mit Silverlight5.

Jetzt versuche ich es mit WinRT in eine Metro App zu portieren.

Die Migration von Silverlight zu XAML UI ist ziemlich einfach und funktionierte gut. Die PInvoke-Signaturen und -Attribute wurden ordnungsgemäß mit dem Namespace System.Runtime.InteropServices und dem DLLImport-Attribut erkannt.

Das Problem ist, dass, wenn ich die App ausführen und eine Methode aus der pInvoked nativen DLL aufrufen, die in meiner SL5-App funktioniert (das funktioniert sogar unter Windows8), habe ich diese Ausnahme:

%Vor%

Also, meine Frage ist, was ist das Problem an diesem PInvoke? Da es unter Windows8 mit einer SL5-App gut funktioniert, sehe ich keine Gründe für Probleme mit WinRT / Metro Apps.

    
___ tag123silverlight ___ Silverlight ist Cross-Browser plattformübergreifendes Plug-In von Microsoft für Medienerlebnisse und umfangreiche interaktive Anwendungen. ___ qstnhdr ___ PInvoice in Metro Apps mit Windows 8 / WinRT ___ antwort12122750 ___

Sofern es sich nicht um eine System-DLL oder anderweitig über den Systempfad lokalisierbare Methode handelt, müssen Sie sicherstellen, dass Ihre DLL in denselben Ordner kopiert wird, in dem die Metro-Anwendung implementiert ist.

Ich habe das Problem gelöst, indem ich die native DLL zu meinem Metro-Anwendungsprojekt hinzugefügt habe, um sicherzustellen, dass Build Action auf Content und In Output-Verzeichnis kopieren ist auf Immer kopieren oder Kopieren, falls neu festgelegt.

    
___ tag123pinvoke ___ P / Invoke ist eine Implementierungsspezifikation, die von Microsoft der Common Language Infrastructure (CLI) für den Aufruf systemeigener Codebibliotheken aus verwaltetem Code erstellt wurde. ___ tag123windows8 ___ Der Nachfolger von Microsoft Windows 7, der sich auf einen neuen Schnittstellenstil für touchbasierte Geräte und Tablets konzentriert. ___ tag123windowsruntime ___ Windows Runtime (WinRT) ist eine Microsoft-Plattformarchitektur, mit der Anwendungen in einer Sandbox-Umgebung ausgeführt werden können, in der eine UI / UX von Windows Modern Style angezeigt wird. Nicht zu verwechseln mit Windows RT, der Edition von Windows 8 für ARM-Geräte; siehe Windows-RT. ___ answer12044370 ___

Nach Antworten von Pavel Minaev auf Chris Pietschmanns Antwort:

  

P / Invoke und COM Interop werden mit Sicherheit für .NET Metro Apps unterstützt. Die Win32-API wird ebenfalls unterstützt und kann über die oben genannten Technologien aufgerufen werden. Sie ist jedoch auf die Funktionen beschränkt, die für Metro-Apps verfügbar sind (dh wenn eine C ++ Metro-App sie nicht aufrufen kann, auch keine .NET-App) / p>

Wie Morten Frederiksen darauf hinweist, ist es jedoch wahrscheinlich, dass CarTFTFM.dll einen nicht unterstützten Teil des Win32 enthält API-Oberfläche für WinRT:

  

Nur eine Teilmenge der Win32- und COM-API wird unterstützt: msdn.microsoft.com/de-de us / library / windows / apps / br205757

    
___ tag123microsoftmetro ___ Wenn Sie keine Designfragen haben, sollten Sie Ihre Frage eher als Windows-Store-Apps oder Windows-Runtime oder Winrt-Xaml oder Winjs kennzeichnen. Metro (jetzt "Microsoft Design Language") war ein interner Codename für eine typografiebasierte Designsprache für Benutzeroberflächen, die von Microsoft erstellt wurde. Es ist in Windows Phone 7 und Windows 8 prominent vertreten. ___
Anders Gustafsson 25.08.2012 14:18
quelle