2012-07-10 7 views
10

Tengo un formulario .NET y un código nativo en mi Visual Studio. El problema es: No puedo declarar una instancia global de mi forma de .NET en mi código nativo, así:C++ declarando una variable administrada en un código nativo

Editor^ maineditor; 

Me da este problema:

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

El artículo de MSDN para C3145 documentos Este error también. Y también da la solución alternativa, convertirlo en un miembro estático de la clase de referencia. –

Respuesta

12

En lugar de utilizar un mundial try estática por lo que es un método estático en un tipo de contenedor

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

Gracias, pero cuando defino el editor, aparece el segundo código: una variable con duración de almacenamiento estática no puede tener un identificador –

+0

y al compilar: 'editor': la variable global o estática puede no tener el tipo gestionado 'Cube3D: : Editor^' –

+0

@ user1492812 Vaya, no me di cuenta de que era un problema. Se eliminó esa parte de la respuesta – JaredPar

5

envolver el mango con una gcroot <> struct

gcroot<Editor^> maineditor; 
+0

Funciona como un encanto y más limpio que la creación de una clase de envoltura ficticia :-) – Cameron

0

usted tiene su clase estática encima de la tapa (referece: Can a class be declared static in c++?)

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

Ahora simplemente referencia a dicha clase

ManagedGlobals::xl = gcnew Excel::Application(); 
Cuestiones relacionadas