Ich habe eine einfache .NET-DLL, die mit VS2010 C # erstellt wurde, die zwei statische Member einer Klasse verfügbar macht
%Vor%Ich habe dann eine Console-App von VS2010 C ++ erstellt und diese Funktion über _tmain
hinzugefügt %Vor%Das Hinzufügen der Referenz und das Kompilieren gibt mir diesen Fehler
%Vor%Einige meiner Beobachtungen:
Test(List<int> test)
in Test2(List<int> test)
umbenenne
Meine Frage ist, was schief läuft und wie man es von der C ++ Seite aus beheben kann.
Meine aktuelle Problemumgehung besteht darin, die Methode in C # umzubenennen, aber ich würde das lieber nicht tun müssen, da ich das Gefühl habe, dass es eine Einstellung gibt, die ich in meinem C ++ - Projekt vermisse.
Bearbeiten:
Ich habe eine bessere Problemumgehung in C ++ gefunden, es sieht so aus, als könnte ich die .NET-Aufrufe in eine andere Funktion einfügen.
%Vor%Es scheint albern zu sein, dies zu tun, ich frage mich, ob es ein Compiler Bug ist? Was mir Angst macht, ist die Verwendung solcher Methoden und die Sorge, dass der C # -Entwickler zu einem späteren Zeitpunkt eine solche statische Methode hinzufügen und die C ++ - Builds auflösen könnte.
Ich werde hier nur eine wilde Aufnahme machen, mit folgender Begründung:
Während der Kompilierung von MSVCs C ++ sieht der extern "C" function
TestMe()
eine Funktion Test()
innerhalb einer Klasse Polygon
. Polygon
ist ein unvollständiger Typ für den Compiler. Ich nehme an, der Compiler kann nicht sehen, ob die Funktion Polygon::Test(3)
einen unvollständigen Typ zurückgibt oder überhaupt zurückgibt, sie entscheidet, dass sie an dieser Stelle einen Fehler zurückgeben muss, falls der Typ kein einfacher C-Style-POD ist Geben Sie ein.
Das obige scheint eine vernünftige Annahme von MSVC zu sein, wie in (7.5 / 9 "Verbindungsspezifikationen") der C ++ Standard sagt:
"Die Verknüpfung von C ++ mit Objekten, die in anderen Sprachen definiert sind, und Objekten, die in C ++ aus anderen Sprachen definiert sind, ist implementierungsdefiniert und sprachabhängig. Nur wenn die Objektlayoutstrategien von zwei Sprachimplementierungen ähnlich genug sind, kann eine solche Verknüpfung erfolgen erreicht werden. "
Das würde erklären, dass der Fehler verschwindet, wenn Sie die extern C
-Verbindungsspezifikation entfernen oder den Aufruf durch eine Cstyle-Funktion ersetzen.
Tags und Links c# visual-studio-2010 c++-cli extern linkage