Tamaño de una estructura

26/02/2004 - 01:19 por Aldo S. | Informe spam
Hola,

Cual es la mejor manera de saber el tamaño de una estructura ? Usando
Marshal.SizeOf() ? ejemplo:

public struct MyRectangle
{
public double Xmin;
public double Ymin;
public double Xmax;
public double Ymax;

public static int Size()
{
return Marshal.SizeOf(typeof(double)) * 4;
}
}

Hay estructuras en las que tengo tambien enumeraciones y estas muestran un
error con Marshal.SizeOf())

Como calculo el tamaño de la estructura en managed code ?

O simplemente basta con hacer algo como esto ?

public struct MyRectangle
{
public double Xmin;
public double Ymin;
public double Xmax;
public double Ymax;

public static int Size()
{
return 8 * 4;
}
}

Gracias
Alfonso Moreno

Preguntas similare

Leer las respuestas

#1 Aldo S.
26/02/2004 - 04:13 | Informe spam
Hola,

Gracias por la respuesta.

private enum SGEntityID : byte {Rectangle, Polyline, Polygon};

private struct MyRectangle
{
public double xmin;
public double ymin;
public double xmax;
public double ymax;
public SGEntityID EntityID;
}

Esto da error:

MessageBox.Show(Marshal.SizeOf(typeof(SGEntityID)).ToString());


Sin embargo, esto no da error:

MessageBox.Show(Marshal.SizeOf(typeof(MyRectangle)).ToString());

Pero, en este ultimo caso, el resultado es 40, no obstante la enumeracion
esta definida como byte. Tengo que definir algun atributo en la estructura o
algo asi ?

Saludos,
Aldo,



"Crosio, Pablo" wrote in message
news:uv4q0PB$

aldo

no entiendo porque te da el error, yo lo haria asi:


public struct MyRectangle
{
public double Xmin;
public double Ymin;
public double Xmax;
public double Ymax;

public static int Size()
{
return Marshal.SizeOf(typeof(MyRectangle));
}
}

salu2!!

pablo

"Aldo S." wrote in message
news:uY6ve4$#
> Hola,
>
> Cual es la mejor manera de saber el tamaño de una estructura ? Usando
> Marshal.SizeOf() ? ejemplo:
>
> public struct MyRectangle
> {
> public double Xmin;
> public double Ymin;
> public double Xmax;
> public double Ymax;
>
> public static int Size()
> {
> return Marshal.SizeOf(typeof(double)) * 4;
> }
> }
>
> Hay estructuras en las que tengo tambien enumeraciones y estas muestran


un
> error con Marshal.SizeOf())
>
> Como calculo el tamaño de la estructura en managed code ?
>
> O simplemente basta con hacer algo como esto ?
>
> public struct MyRectangle
> {
> public double Xmin;
> public double Ymin;
> public double Xmax;
> public double Ymax;
>
> public static int Size()
> {
> return 8 * 4;
> }
> }
>
> Gracias
> Alfonso Moreno
>
>
>
>


Respuesta Responder a este mensaje
#2 Crosio, Pablo
26/02/2004 - 04:15 | Informe spam
"Aldo S." wrote in message
news:uY6ve4$#
Hola,

Cual es la mejor manera de saber el tamaño de una estructura ? Usando
Marshal.SizeOf() ? ejemplo:

public struct MyRectangle
{
public double Xmin;
public double Ymin;
public double Xmax;
public double Ymax;

public static int Size()
{
return Marshal.SizeOf(typeof(double)) * 4;
}
}

Hay estructuras en las que tengo tambien enumeraciones y estas muestran un
error con Marshal.SizeOf())

Como calculo el tamaño de la estructura en managed code ?

O simplemente basta con hacer algo como esto ?

public struct MyRectangle
{
public double Xmin;
public double Ymin;
public double Xmax;
public double Ymax;

public static int Size()
{
return 8 * 4;
}
}

Gracias
Alfonso Moreno




Respuesta Responder a este mensaje
#3 Crosio, Pablo
26/02/2004 - 04:17 | Informe spam
aldo

no entiendo porque te da el error, yo lo haria asi:


public struct MyRectangle
{
public double Xmin;
public double Ymin;
public double Xmax;
public double Ymax;

public static int Size()
{
return Marshal.SizeOf(typeof(MyRectangle));
}
}

salu2!!

pablo

"Aldo S." wrote in message
news:uY6ve4$#
Hola,

Cual es la mejor manera de saber el tamaño de una estructura ? Usando
Marshal.SizeOf() ? ejemplo:

public struct MyRectangle
{
public double Xmin;
public double Ymin;
public double Xmax;
public double Ymax;

public static int Size()
{
return Marshal.SizeOf(typeof(double)) * 4;
}
}

Hay estructuras en las que tengo tambien enumeraciones y estas muestran un
error con Marshal.SizeOf())

Como calculo el tamaño de la estructura en managed code ?

O simplemente basta con hacer algo como esto ?

public struct MyRectangle
{
public double Xmin;
public double Ymin;
public double Xmax;
public double Ymax;

public static int Size()
{
return 8 * 4;
}
}

Gracias
Alfonso Moreno




Respuesta Responder a este mensaje
#4 pablo crosio
26/02/2004 - 21:07 | Informe spam
Aldo:

SizeOf devuelve el tamaño "no manejado" de un tipo de
datos con el objetivo de realizar marshaling... por
ejemplo pasar datos desde codigo manejado a no manejado...

El tema de que te de 40 y no 33 es por un tema de
alineamiento de las estructuras, esto viene de C y depende
ademas de los compiladores... lo que se esta haciendo es
completar (padding) el ultimo miembro para llegar a un
multiplo de 8 bytes...

¿Que es especificamente lo que necesitas hacer?

Salu2!!

Pablo

Hola,

Gracias por la respuesta.

private enum SGEntityID : byte {Rectangle, Polyline,


Polygon};

private struct MyRectangle
{
public double xmin;
public double ymin;
public double xmax;
public double ymax;
public SGEntityID EntityID;
}

Esto da error:

MessageBox.Show(Marshal.SizeOf(typeof


(SGEntityID)).ToString());


Sin embargo, esto no da error:

MessageBox.Show(Marshal.SizeOf(typeof


(MyRectangle)).ToString());

Pero, en este ultimo caso, el resultado es 40, no


obstante la enumeracion
esta definida como byte. Tengo que definir algun atributo


en la estructura o
algo asi ?

Saludos,
Aldo,



"Crosio, Pablo" wrote in


message
news:uv4q0PB$

aldo

no entiendo porque te da el error, yo lo haria asi:


public struct MyRectangle
{
public double Xmin;
public double Ymin;
public double Xmax;
public double Ymax;

public static int Size()
{
return Marshal.SizeOf(typeof(MyRectangle));
}
}

salu2!!

pablo

"Aldo S." wrote in message
news:uY6ve4$#
> Hola,
>
> Cual es la mejor manera de saber el tamaño de una




estructura ? Usando
> Marshal.SizeOf() ? ejemplo:
>
> public struct MyRectangle
> {
> public double Xmin;
> public double Ymin;
> public double Xmax;
> public double Ymax;
>
> public static int Size()
> {
> return Marshal.SizeOf(typeof(double)) * 4;
> }
> }
>
> Hay estructuras en las que tengo tambien




enumeraciones y estas muestran
un
> error con Marshal.SizeOf())
>
> Como calculo el tamaño de la estructura en managed




code ?
>
> O simplemente basta con hacer algo como esto ?
>
> public struct MyRectangle
> {
> public double Xmin;
> public double Ymin;
> public double Xmax;
> public double Ymax;
>
> public static int Size()
> {
> return 8 * 4;
> }
> }
>
> Gracias
> Alfonso Moreno
>
>
>
>






.

Respuesta Responder a este mensaje
#5 Octavio Hernandez
27/02/2004 - 23:27 | Informe spam
Aldo,

Es normal que el tamaño sea 40, porque por defecto los campos de una struct
se ajustan a fronteras de 8 bytes. Si te interesa que las instancias de una
estructura ocupen el mínimo espacio en memoria, debes asociarle a la
estructura el atributo StructLayout(), pasándole el valor Sequential al
parámetro LayoutKind y el valor 1 al campo Pack.

Saludos,

Octavio Hernandez

"Aldo S." escribió en el mensaje
news:uQFsxZB$
Hola,

Gracias por la respuesta.

private enum SGEntityID : byte {Rectangle, Polyline, Polygon};

private struct MyRectangle
{
public double xmin;
public double ymin;
public double xmax;
public double ymax;
public SGEntityID EntityID;
}

Esto da error:

MessageBox.Show(Marshal.SizeOf(typeof(SGEntityID)).ToString());


Sin embargo, esto no da error:

MessageBox.Show(Marshal.SizeOf(typeof(MyRectangle)).ToString());

Pero, en este ultimo caso, el resultado es 40, no obstante la enumeracion
esta definida como byte. Tengo que definir algun atributo en la estructura


o
algo asi ?

Saludos,
Aldo,



"Crosio, Pablo" wrote in message
news:uv4q0PB$
>
> aldo
>
> no entiendo porque te da el error, yo lo haria asi:
>
>
> public struct MyRectangle
> {
> public double Xmin;
> public double Ymin;
> public double Xmax;
> public double Ymax;
>
> public static int Size()
> {
> return Marshal.SizeOf(typeof(MyRectangle));
> }
> }
>
> salu2!!
>
> pablo
>
> "Aldo S." wrote in message
> news:uY6ve4$#
> > Hola,
> >
> > Cual es la mejor manera de saber el tamaño de una estructura ? Usando
> > Marshal.SizeOf() ? ejemplo:
> >
> > public struct MyRectangle
> > {
> > public double Xmin;
> > public double Ymin;
> > public double Xmax;
> > public double Ymax;
> >
> > public static int Size()
> > {
> > return Marshal.SizeOf(typeof(double)) * 4;
> > }
> > }
> >
> > Hay estructuras en las que tengo tambien enumeraciones y estas


muestran
un
> > error con Marshal.SizeOf())
> >
> > Como calculo el tamaño de la estructura en managed code ?
> >
> > O simplemente basta con hacer algo como esto ?
> >
> > public struct MyRectangle
> > {
> > public double Xmin;
> > public double Ymin;
> > public double Xmax;
> > public double Ymax;
> >
> > public static int Size()
> > {
> > return 8 * 4;
> > }
> > }
> >
> > Gracias
> > Alfonso Moreno
> >
> >
> >
> >
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida