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:
@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
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
@ 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