C <-> C++ <-> C++/CLI
-
Es ist schlimm genug, dass Anfänger nicht wissen, was zu C und was zu C++ gehört.
Jetzt gibts noch die Variante, dass sie nicht wissen, was zu C bzw. C++ bzw. C++/CLI gehört.Ich frage mich, warum das so schwierig ist, diese Sprachen auseinander zu halten. Ich weiss, in manchen Büchern wird schlicht nicht unterschieden. Aber irgendwie muss man doch auch slebst drauf kommen.
Simon
-
Das Problem ist bei C - C++ und C++ - C++/CLI meiner Meinung nach das gleiche - zweitere Sprache ist ne Erweiterung der Ersten.
C++ baut auf C auf und erlaubt ohne Probleme Mischen von "alten" C Funktionen mit C++. Als Anfänger weiß man am Anfang noch nicht mal was aus C und was aus C++ kommt. Außer von den Namen her vielleicht, deutet doch nichts darauf das es C ist statt C++, und als Anfänger hat man damit zu tun dass das Programm funktioniert, irgendwie, und da ist es egal was man benutzt. Das es alles andere als sauber ist und massig Probleme beim willkürlichen Mischen von C und C++ gibt weiß man als Anfänger doch gar nicht.
Mit C++ und C++/CLI ist es genauso. C++/CLI erweitert C++ nur, erlaubt aber weiterhin alles was aus C++ bekannt ist und somit brauch es nicht wundern wenn man Windows Forms Programme sieht wo mit "alten" C++ Funktionen auf Dateien zugegriffen wird, oder STL Container benutzt werden statt .Net Funktionen.
Und das eigentlich fatale ist ja, das das beliebige Mischen von C,C++ und C++/CLI erlaubt ist, niemand hindert dich dran und da wird der Vorteil der Kompatibilität schnell zum Nachteil.
-
Heißt das, ich kann eine in C++ geschriebene dll einfach das Projekt öffnen u. als C++/CLI compilen u. dann in anderen .Net sprachen verwenden?
-
Nein
Die Typen zwischen unmanaged Code ("altes" C++) und managed Code (C++/CLI) sind nicht kompatibel, und wenn du einfach nur nen vorhandenes Projekt mitm C++/CLI Compiler kompilierst, bleibt dein ursprüngliches Projekt auch weiterhin unmanaged Code. C++/CLI ist aber perfekt dafür geeignet Wrapper zu schreiben. Du hast also ne Klasse A in C++, schreibst dir in C++/CLI nen Typen A_NET der die C++ Klasse benutzt. Und diesen Typen A_NET kannst du dann in managed Code, sprich jeder weiteren .Net Sprache, benutzen.
-
Gibt es nicht auch Programme, die so einen Wrapper weitgehend automatisch generieren?
Vielleicht wäre das noch ne lösung für mein Problem:
http://www.c-plusplus.net/forum/viewtopic-var-p-is-1443771.html#1443771
-
Wie Hustbaer es in dem Thread schon sagt - nicht möglich.
Aber solche Controls gibts doch sicherlich auch für .Net, wieso nen C++ Control portieren wollen?