2017-12-13 3 views
-1

Ich versuche, eine C++ erstellen Wrapper für eine C# -Klasse die folgende Anleitung verwenden: pragmateek C++ wrapper for C# classProjekt nicht bauen: „gcroot.h Dieses Dokument wurde von einem anderen Projekt geöffnet wird“

Wenn ich laufe, bauen, ich erhalten diese Fehlermeldung:

Error C1001 An internal error has occurred in the compiler. [project name] C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.12.25827\include\msclr\gcroot.h 110

Wenn ich auf den Fehler klicken funktioniert es wie folgt: VS gcroot.h

void swap(gcroot<T> & _right) 
    { //VS shows error on this line 
      using std::swap; 
      swap(_handle, _right._handle); 
    } 

Linie 110

öffnet Ich erhalte mehrere Popup fordert alle Lesung:

"This document is opened by another project"


Ich bin mit VS2017, .net 4.5

Gibt es einen Trick, um das ich nicht sehen? Gibt es eine bessere oder modernere/kanonischere Möglichkeit, eine .NET-Klasse für die Verwendung in C++ einzubetten? Mein Endziel ist es, in C# zu entwickeln und eine API für den Client in C++ bereitzustellen. Mein Kunde ist zu weit in das Projekt zurückgekehrt und hat dann seinen C# -Typ verloren und möchte nun, dass ich meinen Teil des Projekts auf C++ umstelle.

Ich habe schon eine Menge Zeit auf Google verbracht.

Update: eine der folgenden Hinzufügen bewirkt, dass es um den Fehler werfen:

#include <vcclr.h> 
#include <msclr\auto_gcroot.h> 
+0

Ich bin gcroot. Es tut uns leid. Ich musste. – user4581301

+0

Das ist * auch * wahr! – fish

Antwort

0

Ich hatte das gleiche Problem und eine funktionierende Lösung für mich gefunden:

Lösung: ändern Wrapper-Build von .exe zu DLL

VS: Projekt Properties->Configuration properties->General->Configuration Type->Dynamic Link Library (.dll)

Erklärt: hatte ich das gleiche Problem und geändert Project Properties->Configuration properties->C/C++->All Options->Conformance mode von Yes (/permissive-) zu No

Ein neuer Build einen Linker Eingangspunkt-Fehler angezeigt: LNK1561entry point must be defined

Eine schnelle Überprüfung der Build-Konfiguration ergab die falsche Configuration Type (exe statt dll)

+0

Kurzversion: Korrekt – fish

+0

Lange Version: Ich habe vergessen, dies auf meinem Testprojekt zu tun, und hatte meine Verknüpfung so eingerichtet, dass eine abhängige Wrapper-Klasse die "Release" -Version der DLL verwendet, daher die Änderungen nicht fällig vorwärts für mich nicht für die Veröffentlichung zu bauen. – fish

Verwandte Themen