SoloCodigo
CLR: .Net / Mono / Boo / Otros CLR => C# => Mensaje iniciado por: orosello en Viernes 4 de Mayo de 2007, 18:03
-
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.
-
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 (http://foros.solocodigo.com/index.php?showtopic=27767)
-
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.
-
Por lo menos ahora te retorna algo, podrias probar cambiando los tipos de:
"CharSet=CharSet.Unicode"
CharSet=CharSet.Ansi
CharSet=CharSet.Auto
CharSet=CharSet.None
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.
-
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.