2012-04-24 19 views
7

En C++ puede usar el declarador __declspec(align(#)) para controlar la alineación de los datos definidos por el usuario. ¿Cómo puedo hacer esto por C#. Tengo dos procedimientos escritos en Assembler en mi dll. Los argumentos para los procedimientos (dos matrices) deben alinearse en 16 bytes. Para C++ funciona bien.C# controla la alineación de los datos

I declaraciones solo se utilizan

__declspec(align(16)) 
double a[2]={10.2,10.6}; 
+2

tal vez usted debe decirnos lo que quiere hacer en lugar de (o además de) la forma en que lo haría en otro idioma. – Servy

+4

@Servy: francamente, pensé que era bastante claro en cuanto a lo que quería hacer; proporcionar un ejemplo en un idioma diferente es normal. – NotMe

+0

@ChrisLively No está mal, simplemente no lo considero suficiente. Limita las respuestas a las personas que están familiarizadas con la funcionalidad del otro idioma. Un puerto directo tampoco es siempre una idea entre idiomas. Si se conoce el problema subyacente, se puede usar una solución más apropiada para el idioma. – Servy

Respuesta

8

Si usted está buscando logrado no lograron interoperabilidad (transmisión de datos entre C# /. Basadas en .NET y/C++ de software C/basados ​​en ensamblador), se sería usar una combinación del atributo StructLayout y el atributo FieldOffset:

[StructLayout(LayoutKind.Explicit, Pack = 16)] 
public class MyDataClass { 
    [FieldOffset(0)] 
    double[] a; 
} 

Según MSDN:

El campo System.Runtime.InteropServices.StructLayoutAttribute.Pack determina la alineación de memoria de los campos de datos de un objeto de destino.

http://support.microsoft.com/kb/922785

+0

Si mi respuesta fue de ayuda para usted, márquelo como correcto ... –

+0

Downvoter, me gustaría comentar? –

Cuestiones relacionadas