DllImport

05/07/2004 - 19:13 por Mario Ruiz | Informe spam
Hola a todos

Tengo desarrollado una librería en c++ que realiza una serie de funciones.
El resultado es una matriz de tipos Dato. La librería está dentro de una dll
y lo que me gustaría es conocer la interface que tengo que poner a la dll y
al codigo de c# para que la llamada funcione.

el tipo en c++ es:

struct datoExport
{
int magnitud;
float valor;

};

y la función que se exporta es:

extern "C"
{
void ReadData(struct datoExport **exdatos)
{
}
}


Lo que he declarado en c# es lo siguiente:
public struct ExDato

{

int mag;

float valor;

}

[ DllImport( "libdatos.dll", EntryPoint="ReadData", CharSet=CharSet.Ansi )]

protected static extern void ReadData(out ExDato []c);


El problema es que se que la librería me devuelve una matriz con mas de un
elemento pero en c# al realizar la llamada me devuelve una matriz con un
único elemento.


Un saludo a todos

Mario Ruiz
 

Leer las respuestas

#1 pablo crosio
06/07/2004 - 00:16 | Informe spam
hola!

pregunta

¿la DLL recibe un arreglo de estructuras o un arreglo de
punteros a las estructuras?

segun tu definicion:

struct datoExport** exdatos

parece que la funcion espera un arreglo de punteros a las
estructuras...

depende sea el caso cambia la declaracion de la funcion en
C#

si la funcion espera realmente un arreglo de estructuras
podrias definirla en C# como:

static extern void ReadData([Out, MarshalAs
(UnmanagedType.LPArray )] ExDato[] c);

(Debes especificar Out para que tengan efecto las
modificaciones a las estructuras)

y al llamar a la funcion desde C# pasar solamente el
nombre del arreglo a secas (sin out)...

salu2!!

pablo






Hola a todos

Tengo desarrollado una librería en c++ que realiza una


serie de funciones.
El resultado es una matriz de tipos Dato. La librería


está dentro de una dll
y lo que me gustaría es conocer la interface que tengo


que poner a la dll y
al codigo de c# para que la llamada funcione.

el tipo en c++ es:

struct datoExport
{
int magnitud;
float valor;

};

y la función que se exporta es:

extern "C"
{
void ReadData(struct datoExport **exdatos)
{
}
}


Lo que he declarado en c# es lo siguiente:
public struct ExDato

{

int mag;

float valor;

}

[ DllImport( "libdatos.dll", EntryPoint="ReadData",

protected static extern void ReadData(out ExDato []c);


El problema es que se que la librería me devuelve una


matriz con mas de un
elemento pero en c# al realizar la llamada me devuelve


una matriz con un
único elemento.


Un saludo a todos

Mario Ruiz


.

Preguntas similares