Probleme mit managed und native
-
Jochen Kalmbach schrieb:
Unvollständige Samples zu kopieren ist immer gefährlich...
Korrekt wäre:
void Test() { TEST ^ testvariable = gcnew TEST ; }
oder
ref class Foo { static TEST ^ testvariable = gcnew TEST; };
Ahh Moment!! Dann ist die Variable ja nicht mehr global.... so muss ich das mal ausprobieren (Koennt sein, dass ich das Ganze wirklich als globale Variable brauche- ich melde mich dann aber nochmal!!) !! Danke!!
-
estartu schrieb:
Sorry für OT: Hallo an einen von gleich um die Ecke.
Gruß aus BS.Hihi schoene Gruesse zurueck... bin nur gerade nicht in BS sondern am anderen Ende der Welt.... hier ist es aber natuerlich laengst nicht so cool wie in BS Ach ja!! Wichtig: Eintracht oder Lions ??
-
Managed Typen wirst Du nicht Global halten können, da dies der Politik des Garbage Collectors (ohje, nu hab ich mich plamiert :D) wiederspricht. Du müsstest Dir dann sowas wie einen Singleton bauen oder die einzelnen Stellen zur Laufzeit mit Referenzen versorgen oder [siehe nächster Beitrag ]
-
Knuddlbaer schrieb:
Managed Typen wirst Du nicht Global halten können, da dies der Politik des Garbage Collectors (ohje, nu hab ich mich plamiert :D) wiederspricht. Du müsstest Dir dann sowas wie einen Singleton bauen oder die einzelnen Stellen zur Laufzeit mit Referenzen versorgen oder [siehe nächster Beitrag ]
Nein... kein Grund irgendwas mit "Singleton" Logic zu implementieren... definier (wie in meinem Beispile) eben die Variable als "static" in einer Klasse. Dann kannst Du sie doch von überall her verwenden und ist somit fast genau gleich wie globale Variablen...
-
Hab ich damit das ganze nicht auf ein Modul begrenzt ?
-
Was verstehst Du unter Modul?
Du definierst Deine "globale" Klasse in einer h-Datei:
ref class MyGlobalTest { public: static int s_iTest = 0; int Test(); };
und includierst diese in den jeweiligen cpp-Datein... oder was meinst Du???
-
Ich hab zu lange Pause von C++ gemacht und bin noch nicht fertig mit den Grundlagen auffrischen,
aber IMHO wird das ohne extern nichts weil jedes Modul (also jede Objektdatei) eine eigene Version der Klasse / Variable haben *kann* .
Ich waage mich auf sehr dünnes Eis aber ich meine zu wissen, das es Probleme geben könnte. Zuletzt hab ich mich vor 5 Jahren damit beschäftigt, weil ein Kollege sehr viel globale Vartiablen (ohne extern) verwendete und irgendwann der Kopierschutz drann glauben musste, weil irgendwann die Module zu zertrennt wurden vom Linker, das die Module eigene Versionen hatten.
(Leider 2 Jahre kein C++ gemacht, viel vergessen und mit Globalen Variablen schon immer auf Kriegsfuß gestanden. Und hier wirds speziell, static in klasse ohne extern, muss ich passen).
P.s.: Modul => .cpp => .obj
-
Knuddlbaer schrieb:
Ich hab zu lange Pause von C++ gemacht und bin noch nicht fertig mit den Grundlagen auffrischen,
aber IMHO wird das ohne extern nichts weil jedes Modul (also jede Objektdatei) eine eigene Version der Klasse / Variable haben *kann* .???? Dann musst Du dein IMHO schnell mal auffrischen...
Du redest vermutlich von globalen "static" deklarationen... aber diese hier ist in einer Klasse!
-
Aber was ist mit der Klasse ?
Hab hier mal eine Diskussion angeregt , das Problem finde ich interesannt und ich denke das hier die Meinungen interesannt werden könnten (auch wenn ich davon ausgehe, das Dich das Ergebnis nicht überraschen wird ) )
-
Braunschweiger schrieb:
estartu schrieb:
Sorry für OT: Hallo an einen von gleich um die Ecke.
Gruß aus BS.Hihi schoene Gruesse zurueck... bin nur gerade nicht in BS sondern am anderen Ende der Welt.... hier ist es aber natuerlich laengst nicht so cool wie in BS Ach ja!! Wichtig: Eintracht oder Lions ??
Gar kein (Ball-)Sportfan.
Ich bin mehr für Autos im Dreck (Offroad).
-
Wenn du ganz schlecht gelaunt bist:
ref class Evil { public: Evil(System::String ^Message) { this->Message = Message; } void Doom() { System::Console::WriteLine(this->Message); } property System::String ^Message; }; static Evil ^*Instance = new (Evil ^)(gcnew Evil(L"Ahaha")); int main() { (*Instance)->Doom(); delete *Instance; delete Instance; return 0; }
Natürlich ist das keine Lösung für dein Problem :p .
-
Also erst mal vielen Dank fuer die ganzen Hilfen!! Wenn man sich selbst ein Fenster bastelt dann wuerde ich sagen braucht man vielleicht auch gar nichts globales auf dem Gebiet weil man das dann einfach in der main Funktion deklariert und dann auch seine ganze Main Funktion ueber zur Verfuegung hat...(ich bin zu faul selbst was auf die Beine zu stellen desshalb benutze ich die managed Applications von Visual C++ - vielleicht noch ein Ueberbleibsel aus meiner Delphi Zeit ) aber das mit dem static werde ich mal ausprobieren!! Vielen Dank fuer die Hilfe!!
@estartu: