Llamar una structura desde una dll en c#

Moderador: raul338

C#, tambien llamado C Sharp

Llamar una structura desde una dll en c#

Notapor octaviohg » Vie Dic 26, 2008 9:31 pm

HOLA COMPAÑEROS TENGO UNA PREGUNTA EN LA CUAL ME TIENE MUY ATAREADO :oops:
LES CUENTO TENGO UNA LIBRERIA (DLL) EN VISUAL C++ QUE TIENE FUNCIONES Y TAMBIEN TIENE STRUCTURAS
AHORA BIEN LO QUE QUIERO ES COMO PUEDO LLAMAR UNA ESTRUCTURA DE LA LIBRERIA (DLL) A MI PROYECTO EN C#

YA QUE PARA LLAMAR LAS FUNCIONES DESDE LA LIBRERIA (DLL) ES:
[DllImport("demo.dll")]
public static extern int Suma(int uno, int dos);

PERO PARA LLAMAR UNA ESTRUCTURA NO PUEDO HAYAR COMO ES;
ESPERO ME AYA EXPLICADO SE LOS AGRADECERIA MUCHO
octaviohg
Novato
Novato
 
Mensajes: 5
Registrado: Vie Dic 26, 2008 9:23 pm


Re: Llamar una structura desde una dll en c#

Notapor raul338 » Sab Dic 27, 2008 10:48 am

no entiendo a que te refieres con llamar a una estructura. Las estructuras no se "llaman" sino se crea una estructura equivalente en C#

estructura POINT / POINT_API en C++
Código: Seleccionar todo
  1. typedef struct tagPOINT {

  2.   LONG x;

  3.   LONG y;

  4. } POINT_API, *PPOINT;



Declaración para C#:
Código: Seleccionar todo
  1. public struct POINT_API

  2. {

  3.     public int X;

  4.     public int Y;

  5. }



luego esa estructura es usada directamente por la funcion
espero que te sirva!!!
[img]http://i54.tinypic.com/102peue.jpg[/img]
Avatar de Usuario
raul338
Colaborador
Colaborador
 
Mensajes: 132
Registrado: Mar May 31, 2005 1:44 pm
Ubicación: Buenos Aires


Re: Llamar una structura desde una dll en c#

Notapor octaviohg » Sab Dic 27, 2008 1:27 pm

gracias por responder, a lo que refiero por ejemplo en una libreria (dll) en visual c++ tengo una funcion de suma y una estructura algo asi

extern "C"
int Suma(int dato1, int dato2)
{
int temp;
temp=dato1+dato2;
return (temp);
};

typedef struct unos{
int i1;
int j1;
};

ahora bien compilo y genero una libreria (dll) ahora voy a mi proyecto en C# y llamo a la funcion suma de la libreria
con esto

[DllImport("demo.dll")]
public static extern int Suma(int uno, int dos);

ahora bien pero tambien quiero llamar a la estructura pero ahi es donde me atore porque ahi es donde tengo dudas de como llamar el entero i1 y el entero j1

espero me haya explicado mejor

se los agradeceria mucho si me pueden orientar

muchas gracias
octaviohg
Novato
Novato
 
Mensajes: 5
Registrado: Vie Dic 26, 2008 9:23 pm

Re: Llamar una structura desde una dll en c#

Notapor raul338 » Lun Dic 29, 2008 7:11 am

sigo sin entender que quieres hacer...

Código: Seleccionar todo
  1. extern "C"

  2. typedef struct unos{

  3. int i1;

  4. int j1;

  5. };


seria en C#
Código: Seleccionar todo
  1. struct unos{

  2. int j1;

  3. int i1;

  4. }



no puedes cambiar los datos en C# de una estructura de C++ directamente. Lo que puedes hacer es manipularlo por funciones. Es decir, tendrias que tener la funcion suma asi :

Código: Seleccionar todo
  1. extern "C"

  2. int Suma(unos DatosASumar)

  3. {

  4. int temp;

  5. temp=DatosASumar.i1 + DatosASumar.j1;

  6. return (temp);

  7. };



y desde C# se llamaria asi:

Código: Seleccionar todo
  1.  

  2. [DllImport("demo.dll")]

  3. public static extern int Suma(unos DatosASumar);

  4. //...........

  5. unos Datos;

  6. Datos.i1 = 5;

  7. Datos.j1 = 6;

  8. int resto = Suma(Datos); // 11

  9.  



espero que te sirva!
[img]http://i54.tinypic.com/102peue.jpg[/img]
Avatar de Usuario
raul338
Colaborador
Colaborador
 
Mensajes: 132
Registrado: Mar May 31, 2005 1:44 pm
Ubicación: Buenos Aires

Re: Llamar una structura desde una dll en c#

Notapor octaviohg » Lun Dic 29, 2008 1:16 pm

bueno lo de funcion de suma es un ejemplo de como llamaba una funcion, ahora bien puse una estructura para hacer el ejemplo, lo que no puedo hacer es llamar los datos que contiene una estructura por ejemplo

en visual c++ (en una dll)
extern "C"
typedef struct ejemplo{
int e1;
int e2;
};

y en C#.Net como puedo llamar e1 y e2 de la estructura ejemplo, espero que ahora si me haya explicado
ya le intente asi com otu dices por medio de funciones pero marca un error me dice

Error The type or namespace name 'ejemplo' could not be found (are you missing a using directive or an assembly reference?)

te agradeceria mucho si me respondes o me orientas

muchas gracias
octaviohg
Novato
Novato
 
Mensajes: 5
Registrado: Vie Dic 26, 2008 9:23 pm

Re: Llamar una structura desde una dll en c#

Notapor raul338 » Mié Dic 31, 2008 7:07 am

Con que codigo te marca ese error?

La mejor forma que podria decirte es que la funcion devuelva esa estructura o que la estructura pase por unos de sus parametros (por referencia) y los camibe. Eso si, solo en C++ se marcan por referencia, en C# no por que da error de seguridad (aun asi igual funciona, no te pongo el ejemplo "por referencia" ya que mucho no me acuerdo de C++ y si invento un codigo estaria escribiendo cualquier cosa :wink: )

C++
Código: Seleccionar todo
  1. extern "C"

  2. unos Suma(int a, int b)

  3. {

  4. unos Temp;

  5. unos.a = 1;

  6. unos.b = 4;

  7. return unos;

  8. };



C#
Código: Seleccionar todo
  1. [DllImport("demo.dll")]

  2. public static extern Unos Suma(int a, int b);

  3. //...........

  4. unos Datos;

  5. Datos= Suma(5, 7);

  6. MessageBox.Show(Datos.a);

  7. MessageBox.Show(Datos.b);

  8.  

[img]http://i54.tinypic.com/102peue.jpg[/img]
Avatar de Usuario
raul338
Colaborador
Colaborador
 
Mensajes: 132
Registrado: Mar May 31, 2005 1:44 pm
Ubicación: Buenos Aires


    

Volver a C#

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados