• Domingo 19 de Mayo de 2024, 09:42

Autor Tema:  Pasar Parametros A Una Dll En Vs C++  (Leído 2655 veces)

orosello

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Pasar Parametros A Una Dll En Vs C++
« en: Viernes 4 de Mayo de 2007, 18:03 »
0
Hola:

Estoy trabajando con una DLL en Vs C++ de la cual quiero utilizar una funcion que espera como parametro unc char*. El valor que le deseo pasar lo tomo de un componente de texto (despues de convertirlo aun char array). Pero en la Dll solo me toma el valor del primer caracter.

Alguin sabe como pasarle es parametro corrctamente para desde C# utilizar esa funcion.


Gracias.

Saludos Orosello.

Neopro

  • Miembro MUY activo
  • ***
  • Mensajes: 316
    • Ver Perfil
Re: Pasar Parametros A Una Dll En Vs C++
« Respuesta #1 en: Viernes 4 de Mayo de 2007, 18:18 »
0
Mira:

A. En el caso de Unmanaged DLL

1.- Invocar a la DLL con DllImport.

2.- Copiar los struct y enum que utilice esa dll, para eso debes tener el .h de la DLL.

3.- Llamar a la funcion y asegurarte de si pasa como puntero, dependiendo de lo que pida la DLL, y pasarla como referencia, enviandole la dirección del puntero con '&', con ref u out.

B. DLL que agregas a la lista de using (Creo que no es tu caso.)

1.- Verficar las funciones a utilizar y llamadas.

2.- Debes tener bien en claro lo que solicita la DLL.

3.- Se crea el objeto y se trabaja directamente con él.

Tambien puedes revisar esto:

http://foros.solocodigo.com/index.php?showtopic=27767
              [size=109]"Has lo que digo y no hagas lo que hago"[/size]

orosello

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Pasar Parametros A Una Dll En Vs C++
« Respuesta #2 en: Viernes 4 de Mayo de 2007, 18:45 »
0
Mira probe con (ref) a la hora de pasrle el parametro

[DllImport("SystemHookCore.dll", EntryPoint="InstallService",  SetLastError=true,
CharSet=CharSet.Unicode, ExactSpelling=true,
CallingConvention=CallingConvention.StdCall)]
private static extern void InstallService(ref char[] servicename);

luego en una funcion de mi .cs digo

public void InstallServices(ref char[] servicename)
{
  InstallService(ref servicename);
}

pero lo que me llega a la funcion

void InstallService(char* servicename)
{
.....
}
en la DLL son caracteres extraños nada que ver con la  cadena que le paso.

Saludos.

Neopro

  • Miembro MUY activo
  • ***
  • Mensajes: 316
    • Ver Perfil
Re: Pasar Parametros A Una Dll En Vs C++
« Respuesta #3 en: Viernes 4 de Mayo de 2007, 18:51 »
0
Por lo menos ahora te retorna algo, podrias probar cambiando los tipos de:

"CharSet=CharSet.Unicode"
Código: Text
  1.  
  2. CharSet=CharSet.Ansi
  3. CharSet=CharSet.Auto
  4. CharSet=CharSet.None
  5.  
  6.  

Lo otro que puedes usar, ya que se trata de un arreglo de char es que tu uses como tipo en vez de char[], byte[]. Son compatibles y tambien te cambia un poco la estructura de lo que muestra. Para C++ es transparente y equivalente, ya que char en C++ es de 8 bits y en C# es de 16 bits y como byte en C# es de 8 bits es mas recomendado.
              [size=109]"Has lo que digo y no hagas lo que hago"[/size]

orosello

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Pasar Parametros A Una Dll En Vs C++
« Respuesta #4 en: Viernes 4 de Mayo de 2007, 19:08 »
0
No sabes cuanto le agradezco  la ayuda ya que es para  un trabajo de curso  y esto me tenia con dolores de cabez , ya todo me esta trabajando bien.


Muchisimias Gracias.