Woran erkenne ich Mangaged C++?



  • Hi leute,

    ich habe mal vor Jahren C++ Programmiert aber scheine ich nicht mehr ganz auf dem laufenden zu sein:

    Ich habe nun ein Projekt bekommen was ich weiter bearbeiten möchte. Es ist ein C++ Projekt aber ich bin mir nicht sicher ob das ein Managed oder Unmanaged C++ Programm ist.
    Woran kann ich das erkennen? ich nutzte Visual Studio 2005 und nen harken habe ich da jedenfalls nicht gefunden.
    Ich glaube das dieses Tool mit MFC geschrieben wurde, hebt das Managed C++ zwangsmaessig auf oder wie kann ich das verstehen?

    Aus dem Projekt kommt eine DLL die in dem Reflektor (lutz Roeders) sagt das er kein CLI Header findet, was ist nun genau ein CLI Header? die AssamblyInfo?

    sorry fuer die newbie Fragen *schaem*



  • CLI ist üblicher weise die Common Language Infrastrucktur, wenn es um .net geht.

    Ich erkenne es immer daran, ob es sich mit managed/unmanaged types verträgt...
    Ansonsten kann man noch gucken, ob Klassen mit class/struct oder mit "ref class" da stehen. ref classs ist managed. wenn pointer mit ^ stehen: managed, wenn sie mit * stehen: unmanaged



  • Man sollte noch zwischen managed C++ und C++/CLI unterscheiden.

    In Managed C++ sind managed Zeiger mit * angegeben, nicht mit ^



  • mhh meine Klasse hat "class HelloWorld" (als beispiel) also ist es unmanaged bzw. nicht CLI?

    wie kompliert ist es Code umzuschreiben? oder waere es schon fast leichter ihn in C# umzuschreiben?

    Hintergrund:
    meine DLL braucht einen starken namen und unmanaged C++ scheint das nicht zu unterstuetzen, oder taeusche ich mich?





  • Erstmal danke! der Bericht auf MSDN ist schonmal sehr hilfreich nur hab ich nochmal eine Frage zu meinem Verstaendnis:

    es gibt nun 3 Varianten von C++?
    Unmanaged
    Managed
    CLI

    ? oder ist MFC auchnochmal eine extra Variante?

    als ich damals C++ programmiert habe, gabs nur eine Variante O.o



  • Es gibt ISO C++ nach dem Standard von 1998/2003.
    Dann gibt es die managed extensions von Microsoft, in .NET 1.1. Die Syntax war grausam, wurde IMHO nie standardisiert.
    C++/CLI ist eine Verbesserung von den managed extensions, wo u.a. die Syntax für Handles der der Zeiger entspricht, nur mit anderen Symbolen (statt überall ein __gc einzufügen). Ist durch die ECMA standardisiert worden.

    Die gute, alte MFC ist eine Klassenbibliothek, die auf ISO C++ (z.T. noch früher) aufsetzt, vielleicht unter der Nutzung von ein paar MS-Spracherweiterungen, die man aber als Benutzer der Bibliothek vernachlässigen kann.



  • Mmhh okay ich verstehe nun langsam die Zusammenhänge.
    Nur scheint mir native C++ und CLI ähnlich auszusehen.
    Ich habe hier eine Klasse:

    class CMyClass :
    	public CAtlMfcModule
    {
    public:
    	DECLARE_LIBID(LIBID_MyClass);
    	DECLARE_REGISTRY_APPID_RESOURCEID(IDR_ANAPTISCORRECTOR, "{XXX-XXX-XXX}");
    };
    

    und ich bin mir unsicher ob das nun CLI ist oder ebend nicht und ob native C++ auch strong names bekommen kann.

    sorry fuer die dummen Fragen 😕



  • Bei der Klassendefinition ist es sehr einfach zu erkennen:

    - enthält ein "__gc" => Managed C++
    - enthält ein "ref" oder "value" => C++/CLI
    - enthält keines von beiden => native (bzw. besser gesagt "unmanaged")



  • Danke!! das war die Info die ich brauchte!
    nun recherchier ich noch ob native C++ auch starke namen (strong named) haben können.



  • Wie erkennt man mixed-mode?



  • #ifdef _MANAGED
    // mixed-mode
    #endif
    


  • nochmal hi und nochmal eine dumme Frage:

    Strong Named gibt es nur mir .NET richtig? was bedeutet das native bzw. Unmanaged keinen starken namen haben kann oder?



  • Das siehst du richtig. Strong Names gehören zum Sicherheitskonzept von .Net.


Anmelden zum Antworten