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

[SOLUCIONADO] StructureToPtr

Estas en el tema de StructureToPtr en el foro de C/C++ en Foros del Web. Buenos dias, tengo un codigo en C# que recibe un buffer de bytes mediante un socket. Cuando lo recibe mediante PtrToStructure reorganiza ese array y ...
  #1 (permalink)  
Antiguo 30/10/2014, 00:40
 
Fecha de Ingreso: agosto-2010
Mensajes: 20
Antigüedad: 13 años, 8 meses
Puntos: 0
Pregunta StructureToPtr

Buenos dias, tengo un codigo en C# que recibe un buffer de bytes mediante un socket. Cuando lo recibe mediante PtrToStructure reorganiza ese array y rellena una structura.


Código:
if ((int) this.buffer[0] == 36)
              {

                this.struct = (miclase.datos) Marshal.PtrToStructure(gcHandle.AddrOfPinnedObject(), typeof (miclase.datos));
               }
Ahora he de enviar desde otro codigo en c++, esta misma estructura de tal forma que lo entienda ese trozito de codigo de ahi. He intentado probar con StructureToPtr mediante C++ y no consigo compilar el codigo....he probado tambien mediante memcpy pero no llegan bien los datos. Como creeis que seria la mejor forma de enviar los datos desde C++ y rellenar la estructura??

Si podeis aportar algo por poco que sea os lo agradeceria. Saludos!
  #2 (permalink)  
Antiguo 30/10/2014, 02:03
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: StructureToPtr

C# tiene algunas características que no se encuentran en C++, como pueden ser los metadatos accesibles mediante reflexión. En este caso, PtrToStructure hace uso de reflexión para conocer la información que necesita sobre la estructura y poder rellenarla a partir de lo recibido por el socket.

Dado que C++ no tiene este tipo de características la solución pasa por programar de forma manual el proceso de introducir la información recibida en la estructura.

Dependiendo de las características propias de la información que pretendas recibir el proceso puede ser más sencillo o más complicado.
  #3 (permalink)  
Antiguo 30/10/2014, 09:47
 
Fecha de Ingreso: agosto-2010
Mensajes: 20
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: StructureToPtr

Despues de monitorizar el paquete de datos que recibe mi programa he visto que recibe un array del estilo:
90 00 00 00 77 105 99 104 97 101 108

Me gustaria ahora crear un array de BYTES con exactamente esa informacion y poder enviarlo en el socket. Ahora mismo lo que tengo son variables con sus respectivos tipos. Por ejemplo teniendo en cuenta el paquete que he escrito arriba.

Código:
BYTE type = 90;
string name = "Michael";
Como lo intruzco en un array BYTE todo igual que el paquete de arriba para enviarlo en C++?

Gracias por la ayuda.
  #4 (permalink)  
Antiguo 30/10/2014, 10:38
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: StructureToPtr

Si vas a mezclar C# con C++ (en los extremos de la conexión) es conveniente que te plantees implementar un protocolo de conexión. Te lo comento porque cada lenguaje trata la información de forma diferente... eso y que algunos lenguajes pueden meter información adicional en las clases que gestionan... si envías eso directamente por el socket obtendrás efectos raros.

Algunos ejemplos de protocolos son XDR, ASN.1, protocol buffers, ...

Además, si usas alguno de estos protocolos evitarás problemas si trabajas con máquinas BIG ENDIAN / LITTLE ENDIAN.
  #5 (permalink)  
Antiguo 30/10/2014, 15:43
 
Fecha de Ingreso: agosto-2010
Mensajes: 20
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: StructureToPtr

Gracias eferion, voy a probar a ver si sale.

Etiquetas: clase, int
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 17:26.