2012-07-10 14 views
10

Ho un modulo .NET e un codice nativo nel mio Visual Studio. Il problema è: non posso dichiarare un'istanza globale della mia forma NET nel mio codice nativo, in questo modo:C++ che dichiara una variabile gestita in un codice nativo

Editor^ maineditor; 

Mi dà questo problema:

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

L'articolo di MSDN per C3145 documenti questo errore bene. E dà anche la soluzione, rendilo un membro statico della classe ref. –

risposta

12

Invece di utilizzare un globale prova statica rendendolo un metodo statico in un tipo di contenitore

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

THanks, ma quando definisco l'editor, il secondo codice arriva: una variabile con durata di archiviazione statica non può avere un handle o tipo di riferimento di tracciamento –

+0

E quando si compila: 'editor': variabile globale o statica potrebbe non avere il tipo gestito 'Cube3D: : Editor^' –

+0

@ user1492812 oops, non si è reso conto che si trattava di un problema. Rimosso quella parte della risposta – JaredPar

5

avvolgere la maniglia con un gcroot <> struct

gcroot<Editor^> maineditor; 
+0

Funziona come un fascino e più pulito di una classe di wrapper fittizio :-) – Cameron

0

avete la vostra classe statica sulla parte superiore (referece: Can a class be declared static in c++?)

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

Ora basta riferimento quella classe

ManagedGlobals::xl = gcnew Excel::Application(); 
Problemi correlati