Foros del Web » Programación para mayores de 30 ;) » C/C++ »

C++ Managed Class

Estas en el tema de C++ Managed Class en el foro de C/C++ en Foros del Web. Estoy programando actualmente en Visual C++ 2008. Lo que necesito es crear una clase que pueda utilizar tanto en C# como en C++. Sin embargo ...
  #1 (permalink)  
Antiguo 12/01/2011, 17:47
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 9 meses
Puntos: 1
C++ Managed Class

Estoy programando actualmente en Visual C++ 2008. Lo que necesito es crear una clase que pueda utilizar tanto en C# como en C++. Sin embargo cuando utilice C++ quiero utilizar clases propias de C++.

Por ejemplo, tengo la siguiente clase. He puesto el código dentro de la clase
Código C++:
Ver original
  1. public ref class FilasNet:public System::Object
  2. {
  3.     vector<Fila> *_filas;
  4.  
  5.     void ObtenerFila(int posicion, FilaNet^%fila)
  6.     {
  7.         fila->AgregarCampos((*_filas)[posicion]);
  8.     }
  9.  
  10.     void ObtenerFila(int posicion, vector<Campo>&fila)
  11.     {
  12.         fila=(*_filas)[posicion];
  13.     }
  14.  
  15.     void AgregarFila(FilaNet^%fila)
  16.     {
  17.         (*_filas).push_back(fila);
  18.     }
  19.  
  20.     FilasNet()
  21.     {
  22.         _filas = new vector<Fila>;
  23.     }
  24.  
  25.     ~FilasNet()
  26.     {
  27.         delete _filas;
  28.     }
  29.  
  30.  
  31. };

en otro proyecto tengo esta otra funcion

Código C++:
Ver original
  1. class Clase
  2. {
  3. public:
  4.  
  5. void Mostrar(FilasNet^%filas)
  6. {
  7.   vector<Campo> fila;
  8.   filas->ObtenerFila(0, fila);
  9.  
  10. }
  11. };

para esto, el segundo proyecto lo cree para que pudiera utilizar instrucciones de .Net, ademas agregué la librería(dll y lib) donde esta la clase FilasNet

1>.\EntidadNet.cpp(13) : error C3767: 'FilasNet::ObtenerFila': candidate function(s) not accessible
  #2 (permalink)  
Antiguo 13/01/2011, 10:12
Avatar de nup_  
Fecha de Ingreso: noviembre-2010
Mensajes: 265
Antigüedad: 14 años
Puntos: 32
Respuesta: C++ Managed Class

Hola:

Por defecto todos los miembros de una clase son privados.
En la definición de la clase q muestras necesitas adicionar la visibilidad
Código C++:
Ver original
  1. public ref class FilasNet:public System::Object
  2. {
  3.     private:
  4.         vector<Fila> *_filas;
  5.  
  6.      public:
  7.      void ObtenerFila(int posicion, FilaNet^&#37;fila){fila->AgregarCampos((*_filas)[posicion]);}
  8.      void ObtenerFila(int posicion, vector<Campo>&fila){fila=(*_filas)[posicion];}
  9.      // Resto de los métodos y campos públicos
  10.  
  11. };

héchale un ojo a:
http://es.wikibooks.org/wiki/Program...jetos_y_Clases

saludos;

Nup_
  #3 (permalink)  
Antiguo 13/01/2011, 15:41
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: C++ Managed Class

mmmm... creo que mi pregunta sobre pasa el alcance del link que me pasaste, o almenos no toca el tema que me interesa. aun que acertaste en parte del problema (dado que quise simplificar un poco la clase me vole el public :P). en si ese no es el problema.

bueno la cuestion es que necesitaba crear una clase que permita ser utilizada tanto en .net como c++. Para esto se deben utilizar managed class, no se cual sería su traducción correcta :S. El problema es cuando se trata de pasar una clase como parametro creada como unmanaged(una clase común y corriente en c++). El problema esta cuando se quiere utilizar esta clase en otro ensablado, que es cuando marca el error que expuse. Para solucionar este problema se debe utilizar la siguiente instruccion

#pragma make_public(class_unmanaged)

donde class_unmanaged, es una clase de C++. Con esto se podra utilizar la funcion que tiene como parametros uno o mas clases unmanaged,

ve este link para mas informacion

http://msdn.microsoft.com/en-us/libr...07(VS.80).aspx
  #4 (permalink)  
Antiguo 13/01/2011, 15:50
Avatar de nup_  
Fecha de Ingreso: noviembre-2010
Mensajes: 265
Antigüedad: 14 años
Puntos: 32
Respuesta: C++ Managed Class

Hola:

No trabajo en .Net, no puedo aconsejarte nada en ese sentido.
Me basé solamente en el error q te estaba dando:
Cita:
Iniciado por margarito04 Ver Mensaje
1>.\EntidadNet.cpp(13) : error C3767: 'FilasNet::ObtenerFila': candidate function(s) not accessible
espero q alguien más te pueda tirar un cabo.

saludos;


Nup_
  #5 (permalink)  
Antiguo 13/01/2011, 15:53
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: C++ Managed Class

mmm... con la instruccion que te puse se soluciona el problema, gracias de todos modos

Etiquetas: class, managed
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:22.