He la siguiente estructura en C#:Cómo ordenar una matriz de estructuras en C#?
[StructLayoutAttribute(LayoutKind.Sequential)]
public struct RECORD
{
public uint m1;
public uint m2;
public uint m3;
}
necesito demasiado pasar una serie (longitud fija) de estas estructuras a código nativo, que escribe algunos datos de estas estructuras. La matriz se asigna en C# y se pasa a la dll C. Declaré la función importada como:
[DllImport("marshall.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern void doIt(RECORD[] dataRecord);
pero no obtengo ninguna información. Ya probé con el Asistente de interoperabilidad de Invoke. ¿Debería usar IntPtr aquí? ¿Algunas ideas?
Editar:
Este es el código C# para llamar a la función nativa:
RECORD[] rec = new RECORD[256];
doIt(rec);
// values of rec are all zero here
Aquí es la función C:
int doIt(RECORD* rec)
{
// deref pointer and write some data
}
Eso hizo el truco, thx. ¿Hay otros lugares donde se usan estas palabras clave? Nunca los he visto antes – SDD
De MSDN: [refiriéndose a matrices de tipos blittable] Sin embargo, estos tipos se calculan como parámetros In, y debe aplicar los atributos InAttribute y OutAttribute si desea ordenar el argumento como un Parámetro In/Out. – SDD
Gracias esto funcionó para mí, y terminó una lucha de dos horas para hacer esto. –