2012-07-10 13 views
10

Ich habe ein .NET-Formular und einen nativen Code in meinem Visual Studio. Das Problem ist: Ich kann nicht eine globale Instanz meiner .NET-Form in meinem Heimat Code wie folgt erklären:C++ deklariert eine verwaltete Variable in einem nativen Code

Editor^ maineditor; 

Es gibt mir dieses Problem:

error C3145: 'EditorEntry' : global or static variable may not have managed type 'Cube3D::Editor ^' 
+1

im MSDN-Artikel für C3145 Dokumente auch dieser Fehler. Und gibt auch die Problemumgehung, machen Sie es zu einem statischen Mitglied der Ref-Klasse. –

Antwort

12

Statt eine globale Verwendung von statischer Versuch ihm eine statische Methode in einem Containertyp

ref class ManagedGlobals { 
    public: 
    static Editor^ maineditor = nullptr; 
}; 
+0

THanks, aber wenn ich Editor, der zweite Code das kommt: eine Variable mit statischen Speicherdauer kann kein Handle oder Tracking-Verweistyp –

+0

Und beim Kompilieren: 'Editor': globale oder statische Variable möglicherweise nicht verwalteten Typ 'Cube3D: : Editor^' –

+0

@ user1492812 oops, habe nicht erkannt, dass ein Problem war. Entfernte diesen Teil der Antwort – JaredPar

5

wickelt den Griff mit einem gcroot <> struct

machen
+0

Funktioniert wie ein Charme und sauberer als das Erstellen einer Dummy-Wrapper-Klasse :-) – Cameron

0

Sie haben Ihre statische Klasse bis oben (referece: Can a class be declared static in c++?)

ref class ManagedGlobals abstract sealed { 
public: 
    static Excel::Application^ xl; 
}; 

Jetzt verweisen nur dieser Klasse

ManagedGlobals::xl = gcnew Excel::Application(); 
Verwandte Themen