2015-07-03 5 views
6

Ich habe zwei Projekte in meiner Lösung. Eine ist eine universelle C# -Anwendung, und die andere ist ein C++ - Projekt (erhalten von here) und auf Windows 8.1 ausgerichtet (dies wurde von Visual Studio 15 ausgeführt, als ich das Projekt importierte). Ich habe das C++ - Projekt von meinem C# -Projekt referenziert und "Copy Local" auf "true" festgelegt.Kombinieren eines C# - und C++ - Projekts funktioniert für x86 und x64, aber nicht für ARM

Der Code baut perfekt für alle drei Plattformen (x86, x64 und ARM). Bei der Bereitstellung auf einem ARM-Gerät wird jedoch eine Ausnahme in der Zeile ausgelöst, in der ich auf den C++ - Code zugreifen möchte. Auf den x86 und x64 Versionen ist das kein Problem und der Code funktioniert einwandfrei. Die Ausnahme ist eine System.IO.FileNotFoundException und here is a pastebin of the exception in detail.

Mein Verständnis dieser Ausnahme ist, dass die generierte .dll aus irgendeinem Grund nicht auf das Gerät kopiert wird? Ich habe mir die Konfigurationseinstellungen angeschaut und alles scheint korrekt zu sein, soweit ich das beurteilen kann (Screenshot unten). Die andere Möglichkeit besteht darin, dass das C++ - Projekt eine interne Abhängigkeit von einer anderen Klasse hat, die ich irgendwo identifizieren und referenzieren muss. Es gibt eine Zeile vom Stacktrace (in der obigen Pastebin-Verknüpfung enthalten), die darauf hinweist, dass es in der Zeile System.StubHelpers.StubHelpers.GetWinRTFactoryObject(IntPtr pCPCMD) auftritt.

Der C++ - Code verwendet Media Foundation WinRT-Komponenten und sollte auf ARM-Geräten einwandfrei funktionieren.

Es scheint, dass andere Fragen zu SO (wie here) haben sich auch, aber nur für eine bestimmte Plattform wie x86.

Gibt es einen bestimmten Grund, warum dies derzeit auf x86 und x64, aber nicht auf ARM funktioniert?

Screenshots:

enter image description here

enter image description here

+0

@HansPassant Ich habe seit einiger Zeit damit zu kämpfen. Ich bin offensichtlich mit dem Debugger vertraut, aber wie sollte ich speziell nach MFStartup() fehlschlagen? Könnten Sie mir einen Rat geben, um etwas zu versuchen? Ich bin unsicher. – Gordonium

+1

Die C++ - DLL muss mit der C-Laufzeit verknüpft werden.Sind die richtigen Versionen dieser DLLs auf dem ARM-Gerät installiert? Aus diesem Grund hatte ich diesen Fehler oft genug über die Jahre. – 1201ProgramAlarm

+0

@ 1201ProgramAlarm Welche DLLs speziell? Die C++ DLL ist meine eigene, also nehme ich an, du meinst die Laufzeit? Beide Geräte verfügen über die neuesten Versionen von Windows 10 Insider Preview. Wie würde ich überprüfen, welche Version der Laufzeit-DLL das Telefon hat? – Gordonium

Antwort

3

und 8,1

auf Windows erneut abgezielt Das ist richtig es ist Ihr Problem. Wenn Sie ein Windows 10-Gerät zielen, müssen Sie eine neue Windows-Runtime-Komponente (Universal Windows) erstellen:

Universal Windows (10) C++ Windows Runtime Component

Meine Vermutung ist, dass die Windows 8.1 Winmd mit dem Gerät nicht kompatibel ist, ausgewählt.

Ich habe das VideoRecorder-Tool heruntergeladen und reproduziert Ihr Problem. Dann, wenn ich ein neues Winmd Universal Windows, fügen Sie die C++ - Dateien in es, es läuft ohne Probleme auf einem Raspberry Pi 2 mit Windows 10 IoT.

EDIT: Wenn Sie ein Windows 8.1 Gerät zielen und nicht ein 10 Windows-Gerät, dann müssen Sie das Universal-Windows-8.1-Projekt:

Universal Windows 8.1 C++ Windows Runtime Component

ich eine Probe gemacht habe und entfalten es auf einem Nokia Lumia 925 ohne Probleme.

+0

Das sieht gut aus. Ich habe es implementiert, aber leider scheint es, dass ich ein neues Problem (das getrennt von diesem Thread ist) mit einer Fehlermeldung während der Bereitstellung habe. [Ich habe hier eine Frage dazu gestellt] (http://stackoverflow.com/questions/32247835/why-am-i-getting-a-package-could-not-be-registred-deployment-error-on-- Fenster). Sobald ich das gelöst habe, kann ich dich wissen lassen, ob deine Lösung hier funktioniert hat oder nicht und das Kopfgeld belohnen, wenn es so ist. – Gordonium

+0

Auf welches Gerät zielen Sie? Ich habe die Probe auf einem Raspberry Pi 2 mit Windows 10 IoT bereitgestellt. –

+0

Interessant. Ich ziele auf ein Nokia Lumia 820. – Gordonium

Verwandte Themen