Bien, quiero tener una solución con 2 proyectos. Uno que sea las clases del motor(para ello he creado el proyecto como biblioteca de clases en .NET) y otro un ejemplo usando el motor(un proyecto vacio en .NET).
He creado la solución y he creado el proyecto de clases. Luego he creado el otro proyecto dentro de la solución y he agregado la referencia del proyecto de clases. Hasta aquí todo genial.
Aquí está el código de la clase:
namespace Haddd
{
public __gc class Video
{
public:
Video();
};
}
Y aquí el del proyecto en blanco:
using namespace Haddd;
int main()
{
Video *v=new Video();
}
Bien, pues me da un error al compilar el proyecto:
Citard:\Haddd\Managed\Ejemplo\Ejemplo.cpp(5): error C3624: 'System::Object': el compilador no puede encontrar este tipo; está definido en assembly 'mscorlib'
y se refiere a la línea:
Video *v=new Video();
¿Porqué me da este error?
Según las MSDN, poniendo
#using
te solucionará el problema.
PD: en realidad eso lo pone como ejemplo pero por probar... :)
Mi consejo, y el de cualquiero con 2 dedos de frente ;), es que minimices lo que puedas el código en Managed C++, sirve sobre todo como "pegamento" entre código C++ y código manejado.
Sobre tu problema.... en .NET todas las clases derivan de Object. Parece que te falta la referencia al Assembly(dll) donde está definido Object: mscorlib.dll . Me extraña mucho que no tengas añadida la referencia por defecto.
Acabo de probar a hacer lo mismo que tú en el VS2003 y funciona perfectamente, veo que me ha añadido referencia a System.dll también, mira a ver si lo tienes, es la primera vez que toco managed c++ :P
Crear wrappers de motores o subsistemas hechos en c++ para usarlos desde .NET empieza a ser algo muy común, sigo pensando que veremos juegos en 3 capas: subsistemas en C++, juego en C# y script en python.net o lua.net.... (en PC, claro...o XBOX2 ;))
Parece que bersi se me coló :P
Exacto, era la referencia. Gracias por el link.