Windows-Forms + C++ Klassen

Elscha

Mitglied
In Ramen eines C++ Abschlussprojekts, das wir in Visu al Studio programmieren sollten (CLR-> Windows-Forms-Anwendung) tauchen ein paar Fragen auf

1.) Wie kann ich in eine WindowsForms-Anwendung meine C++ Klasse als objekte anhängen, meine momentane Lösung:
Code:
public ref class ClientGUI : public System::Windows::Forms::Form, public Operator
	{
	private:
		ClientNetzwerk netzwerk;
	public:
		ClientGUI(void) : netzwerk(this)
		{
			InitializeComponent();
			//
			//TODO: Konstruktorcode hier hinzufügen.
			//
		}
Liefert folgenden Fehler:
Code:
Fehler	4	error C4368: "netzwerk" kann nicht als Member von "ProjektTE::ClientGUI" (verwaltet) definiert werden: Gemischte Typen werden nicht unterstützt.	f:\home\imit\sel-sharkawy\desktop\projekt\projektte\projektte\ClientGUI1.h	29

2.)Bekomme hin und wieder die Fehlermeldung:
Code:
Fehler	1	error C3265: Ein verwalteter 'poOperator' kann nicht in einem nicht verwalteten 'ServerNetzwerk' deklariert werden	f:\home\imit\sel-sharkawy\desktop\projekt\projektte\projektte\ServerNetzwerk.h	27

Was ist nun verwalteter und nicht verwalteter Code und wie kann ich das nun umgehen?

3.) Wie bekomme ich einen String^ in einen std::string oder char* umgecastet?

4.) Um was handelt es sich beim ^ kann ich es mit * vergleichen?
 
Zuerst mal ein kleiner hilfreicher Link zum Thema managed und unmanaged (verwaltet, nicht verwaltet), damit ich mir jetzt eine lange Erklärung erspare:
http://download.microsoft.com/downl...4-aac1c255a60e/382726459_20_Markt-Technik.pdf

Der Handle Operator ^ funktioniert im Grunde wie ein Pointer * und definiert einen Handle auf ein verwaltetes (managed) Objekt. Das funktioniert nur für ganze Objekte und gilt nur für Objekte auf dem Garbage Collector Heap. Das Handle wird automatisch aktualisiert, wenn der Garbage Collector das Objekt verschiebt (was ja passieren kann). % ist dazu ähnlich wie & (Referenz) und definiert eine Referenz auf ein verwaltetes Objekt und ist nur für Handles und Werttypen gültig.

Lies dich in die Unterschiede zwischen C++ und C++.NET ein, dann tust du dir wesentlich leichter.
 
Ich wollte nun meine selbst geschriebenen Klassen wie folgt erweitern:
Code:
__gc class Klassenname
Wenn ich dieses jedoch mache kommt eine Fehlermeldung das ich /clr:eek:ldSyntax verwenden müsste.
Stelle ich nun in den PRojekt eigenschaften auf OldSyntax um funktioniert gar nichts mehr, ist es nicht möglich nur eine Datei mit OldSyntax laufen zu lassen, oder gibt es für __gc schon wieder etwas neues?
 
Yup gibt es :)
Unter Visual Studio 2005 verwendest du anstelle von
__gc class Klassenname
jetzt
ref class Klassenname (oder value class, je nachdem was du bnenötigst -> genauere info bitte MSDN)
um eine managed Klasse zu erstellen

Enums werden wie folgt managed deklariert:
enum class Enumname

um nun ein Objekt einer managed class zu erstellen verwendest du
gcnew

Aber falls du wirklich die alte Syntax verwenden willst / musst / sollst,
gibt es in den Projekt und Solutionporperties einen Punkt, in dem du auf die alte Syntax umschalten kannst

mfG
Leitman
 
Hey Community,

hab ein altes Visual Studio Projekt, das ich auf Visual Studio 2005 anpassen soll. Jetzt habe ich gelesen, das es die Möglichkeit gibt, /clr:eek:ldSyntax einzubauen! Aber wie geht das? Wie mache ich dem das Compiler das klar?
Würde mich über schnelle Hilfe freuen.

Gruß
Dorschty
 
Rechte Maustaste auf das Projekt,
Eigenschaften->Configuration Properties->General und dann beim vorletzten Punkt "Common Language Runtime Support" kannst du auf clr/oldSyntax umschalten
 

Neue Beiträge

Zurück