C++ (Visual Studio) Klassen Pointer richtig übergeben

Wolly300

Lieutenant
Registriert
Mai 2014
Beiträge
514
Hallo zusammen,

ich habe ein Problem mit der Übergabe von Klassen Instanzen (Pointern) in Visual Studio 2017.

Also mein Code sieht folgender maßen aus:


class Operation

public ref class MainForm : public System::Windows::Forms::Form
public ref class Farbmixtabelle : public System::Windows::Forms::Form

Wie in folgendem Code auch zusehen ist, sind die beiden Klassen in einer eigenen Namespace.

Code:
void main(array<String^>^ arg) {
    Operation * oper;
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false);
    CISGUI::MainForm form(oper);
    Application::Run(%form);
}

In der main() wird eine Instanz von Operation erstellt, in der alle Berechnungen stattfinden sollen (jede andere Klasse/Instanz muss also einen Pointer auf Operation haben). Danach wird das Hauptfenster (WindowsForm) mit einem Pointer auf Operation dargestellt.

Das Problem ist jetzt nur, das ich in Operation keinen Verweis auf die MainForm Instanz habe. Wie bekomme ich diese jetzt ?


Vielen Dank für eure Hilfe.
 
Das klingt für mich irgendwie so, als wäre die Architektur nicht optimal. Wieso sollte (und darf) ein Objekt Zugriff auf die MainForm haben?
 
Entweder übergibst du beim anlegen von oper einen pointer auf die angelegte Form
oder du holst dir sie über andere methoden
z.b. über OpenForms property von Application
https://docs.microsoft.com/en-us/do...s.application.openforms?view=netframework-4.8
Das klappt natürlich nur wenn du genau 1 Form hast, oder du genau weißt was für eine Form du brauchst.

Gibt sicherlich andere Methoden auch, aber Win Forms ist schon eine weile her bei mir...
 
Ich wusste doch, dass mir das irgendwie bekannt vorkommt. Bei deiner Beteiligung deines anderen Threads bin ich da nicht wirklich gewillt, hier Mühe zu verschwenden.
 
  • Gefällt mir
Reaktionen: abcddcba und Coca_Cola
Warum CLI / Mixed C++? Nimm doch für .net C#! Das ist wesentlich einfacher, es gibt wesentlich mehr Dokumentation im Internet und es können deutlich mehr Leute helfen als mit CLI / Mixed C++.

Zum eigentlichen Thema: Gib der Operationklasse eine Referenz bzw. einen Pointer deiner Fensterklasse als Parameter an den Konstruktor der Operationklasse.

greetz
hroessler
 
Zuletzt bearbeitet von einem Moderator:
Ja, kann man lassen hier. Der TE wird sich eh wieder nicht melden, wie schon im anderen Thread ...
 
hroessler schrieb:
Warum CLI / Mixed C++? Nimm doch für .net C#! Das ist wesentlich einfacher, es gibt wesentlich mehr Dokumentation im Internet und es können deutlich mehr Leute helfen als mit CLI / Mixed C++.

Zum eigentlichen Thema: Gib der Operationklasse eine Referenz bzw. einen Pointer deiner Fensterklasse als Parameter an den Konstruktor der Operationklasse.

greetz
hroessler
Das ist ein Projekt. Vorgabe C++ in Visual Studio
 
Das was du verwendest ist kein C++. Das nennt sich CLI C++ und hat nichts mit dem "normalen" (unmanged) C++ zu tun.

Und es macht unter .net genau NULL unterschied ob du mit dem bekloppten CLI C++, mit VB.net, mit F# oder mit C# programmierst. Der Compiler, egal welche .net Sprache, erzeugt später genau den gleichen Code für die .net Runtime.

greetz
hroessler
 
Wenn C++, würde ich heutzutage auf C++/WinRT setzen. Dort kannst du dann ganz normal C++ programmieren und hast trotzdem eine moderne API für die Windows Runtime.
 
Zurück
Oben