Entwickler-Ecke

Basistechnologien - C++ Klasse in C# Project verwenden?


haschme - Do 01.09.16 09:15
Titel: C++ Klasse in C# Project verwenden?
Hallo zusammen,

ich habe mir vor kurzem eine C++ Klasse mit 3 zugehörigen Header-Dateien heruntergeladen.
Ich würde gerne auf die Methoden dieser Klasse in einem existierenden C#-Project zugreifen.

Leider war bei meinem Download keine .dll dabei.

Ist es so überhaupt möglich die C++ Klassen in meinem C#-Project zu verwenden?
Wenn ja, wie macht man das?

Vielen Dank!


Moderiert von user profile iconChristian S.: Topic aus WinForms verschoben am Do 01.09.2016 um 09:21


C# - Do 01.09.16 09:39

Meines Wissens nach kannst du C++ Code nicht direkt verwenden, sondern nur als dll. Aber was hindert dich daran einfach die Dateien in zu einer dll zu kompilieren?


haschme - Do 01.09.16 09:53

user profile iconC# hat folgendes geschrieben Zum zitierten Posting springen:
Meines Wissens nach kannst du C++ Code nicht direkt verwenden, sondern nur als dll. Aber was hindert dich daran einfach die Dateien in zu einer dll zu kompilieren?




Wahrscheinlich hindert mich daran nur meine Unwissenheit im Bezug auf C++.
Gibt es einen Compiler den du mir da empfehlen kannst?

Habe es in Visual Studio versucht aber bekomme immer diese Meldung:

Fehler C1853 Die vorkompilierte Header-Datei "Debug\Lib2.pch" stammt von einer früheren Version des Compilers, oder der vorkompilierte Header stammt von C++, und Sie verwenden Ihn von C (oder umgekehrt) Lib2 c:\entwicklung\test\phonet.c


Hier habe ich übrigends die Dateien heruntergeladen: ftp://ftp.heise.de/pub/ct/listings/9925-252.zip

Das ganze stammt von einem Heise-Artikel den ich interesannt fand: http://www.heise.de/ct/ftp/99/25/252/


Th69 - Do 01.09.16 14:12

Hallo,

das ist aber ein reines C-Projekt (kein C++).
Dann erzeuge mal im Visual Studio ein neues DLL-Projekt und deaktiviere dabei "vorkompilierte Header".

Für die Weiterverwendung in einem anderen C oder C++-Projekt ist dieser Source-Code zwar nicht geeignet (denn der Ersteller hat statische Daten im Header "phonet.h" definiert :gruebel:), aber für die Verwendung von C# aus mittels P/Invoke sollte das keine Rolle spielen (da du dann eh die "function prototypes" aus "ph_ext.h" als C#-Aufrufe nachbilden mußt, welche nur Standard-Datentypen verwenden).

Beachte dabei aber den Kommentar:
ph_ext.h hat folgendes geschrieben:
/**** If you want to use "phonet.c" as a library, ****/
/**** delete the following macro (Note: This will ****/
/**** also disable the function "check_rules"). ****/
#define PHONET_EXECUTABLE