Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: Hendrix en 7 Agosto 2007, 15:14 pm



Título: Char[] != String
Publicado por: Hendrix en 7 Agosto 2007, 15:14 pm
Pues eso, creo que es el problema que me pasa al intentar apsar parametros de tipo char[] a una Dll echa en VB siguiento el siguiente texto (http://www.elguille.info/vb/avanzado/crear_dll_windows_con_vb6_explicado.htm).

Al pasarle numeros no hay ningun problema, pero al pasarle cadenas me da un error y se cierra el programa.

Creo que es por lo que e dicho, que el tipo char[] no es igual al tipo string del VB y por eso da el error.

El error me pasa al intentar llamarlo asi desde el C++:

Código
  1. Saludo("Hola desde C++");

Alguna sugerencia??? :-\



Título: Re: Char[] != String
Publicado por: EvilGoblin en 7 Agosto 2007, 19:23 pm
habria q ver como esta la DLL y q tipo de datos admite...

prueba pasar un puntero   

^^ como es la funcion de la dll?


Título: Re: Char[] != String
Publicado por: Ragnarok en 7 Agosto 2007, 21:44 pm
Lo tienes que declarar como Byte()

http://msdn2.microsoft.com/es-es/library/thwcx436(VS.80).aspx


Título: Re: Char[] != String
Publicado por: Hendrix en 8 Agosto 2007, 14:31 pm
Pero eso es para .Net, no???? Yo lo quiero hacer en C/C++  :-\ :-\

PD: Utilizo los mismos ejemplos que en el de la pagina que puse en el primer post excepto que en la Dll meto esto:

Código
  1. Option Explicit
  2.  
  3. Public Function Saludo(texto As String)
  4. MsgBox texto
  5. End Function

Un Saludo :)


Título: Re: Char[] != String
Publicado por: Ragnarok en 8 Agosto 2007, 21:15 pm
¿Y que pasa si pones esto?

Código
  1. Option Explicit
  2.  
  3. Public Function Saludo(texto() As Byte)
  4. MsgBox texto
  5. End Function


Título: Re: Char[] != String
Publicado por: Hendrix en 9 Agosto 2007, 00:05 am
tampoco funciona.... :-\ :-\


Título: Re: Char[] != String
Publicado por: Freeze. en 9 Agosto 2007, 00:15 am
Yo nunca he podido hacer una dll con visual basic a ver quien me pasa un source para saber si es posible,...

He intentado mil veces y fallo...

Edito:

Se me olvidaba:

Por Favor


Título: Re: Char[] != String
Publicado por: Ragnarok en 9 Agosto 2007, 00:40 am
Vale, había que probar :P

Aunque eso tampoco funcione, si no te da errores de compilación ni de otro tipo, yo lo dejaría porque por el enlace que he puesto antes yo diría que es la forma en que tiene que ser.

Lo único que se me ocurre es que el puntero vaya a la zona de datos del programa al introducir la cadena como una constante y que por eso dé error. Es posible que la dll no tenga permiso para acceder a esa región de memoria, aunque es posible también que no tenga permiso para acceder a ninguna región de memoria del programa y tengas que usar sockets, pipes o algo parecido, no sé exactamente cómo funcionan los permisos con las dlls.

Así que puedes probar a hacer un malloc y strncpy para guardar la cadena en una región de memoria del heap, que será lo que te dé el malloc. Si eso no funciona puedes probar a usar memoria compartida y si no funciona o no quieres la última alternativa serían sockets, pipes o el mecanismo de comunicación entre procesos que prefieras. En este último caso la llamada iría sin argumentos.

-Freeze-, ¿has mirado el link que ha dado Hendrix.?


Título: Re: Char[] != String
Publicado por: Freeze. en 9 Agosto 2007, 00:49 am
Obviamente si y desde hace tiempo...

Pero nada... Cuando la llamo desde otro programa me dice que falta el Entry-Point..


Título: Re: Char[] != String
Publicado por: skapunky en 9 Agosto 2007, 02:45 am
Citar
Creo que es por lo que e dicho, que el tipo char[] no es igual al tipo string del VB y por eso da el error.

El error me pasa al intentar llamarlo asi desde el C++:

Esacto...Yo lo aclaro. El tipo char , yo almenos que programo en pascal se utiliza muy poco y este es solo para declarar de variable una letra, no soporta una cadena de letras, ya que para eso existe string.

Conclusión: Char es para solo una letra.

Se preguntaran, entonces para que sirve char? pues por ejemplo yo hice un programa en pascal con un menu, donde el menu se definia con letras de la A a la F...Entonces, si por el teclado entrava la A se ejecutava la primera opcion del menu...Etc..

Intenten no trabajar con char... Solo sirve para cosas bastante específicas.

Saludos.


Título: Re: Char[] != String
Publicado por: Hendrix en 9 Agosto 2007, 11:58 am
el Char[] es un array de letras, por lo tanto, tedria que ser lo mismo que una string, pero no lo es... :-\ :-\

Intentare comunicarlos por pipes, aunque es algo engorroso tener que comunicarlo asi.... :-\ :-\


Título: Re: Char[] != String
Publicado por: Ferсhu en 13 Agosto 2007, 03:29 am
hendrix q keres pasar una cadena en c++ a una dll?? q error te tira?? probaste con DWORD? no entendi muy bien en donde estas probando  :-\


Título: Re: Char[] != String
Publicado por: byebye en 13 Agosto 2007, 04:26 am
hendrix usa archivos mapeados para eso que es mas comodo que usar pipes.


Título: Re: Char[] != String
Publicado por: Hendrix en 13 Agosto 2007, 15:47 pm
Ok, ya vere como lo soluciono.... :-\ :-\


Título: Re: Char[] != String
Publicado por: SaXo en 15 Agosto 2007, 00:52 am
No estoy seguro pero por lo que he visto y leido en este hilo tu función espera un tipo de dato String y tu estás haciendo una llamada a la función pasandole un tipo de dato char, bueno, un array de char.

En este caso o bien creas un dato de tipo String o bien le dices a tu función que espera un dato de tipo char.



Título: Re: Char[] != String
Publicado por: Ferсhu en 15 Agosto 2007, 01:35 am
Citar
En este caso o bien creas un dato de tipo String o bien le dices a tu función que espera un dato de tipo char.

en c++ no hay tipo string  :xD, lo q si puede funcionar es lo q dijo Ragnarok de ponerlo como "As Byte"



Título: Re: Char[] != String
Publicado por: SaXo en 15 Agosto 2007, 10:30 am
Cuando empezaba a estudiar C++ de las primeras cosas qeu nos enseñaron fue la sobrecarga de operadores y la creación de un objeto String para usarlo como tipo de dato...

String no existe como tipo de dato primitivo en C++ pero se puede crear.


Título: Re: Char[] != String
Publicado por: Ragnarok en 15 Agosto 2007, 17:52 pm
Puedes llamar String al char*, o puedes usar el string de la stl (http://www.sgi.com/tech/stl/basic_string.html). Ninguna de las dos cosas va a funcionar, porque lo que hay que hacer es usar el mismo tipo de datos que la dll.


Título: Re: Char[] != String
Publicado por: Ferсhu en 15 Agosto 2007, 23:22 pm
Por lo q estuve viendo NO es algo SIMPLE, el problema no solo pasa por los tipos, sino q tambien es por q vb trabaja con cadenas unicode, asi q habria q pasarle una cadena en ese formato.

ensima es un lioo, estuve probando jaj y cuando queres pasar algo y no coinciden los tipos no te enteras nada, solo te salta error y hay adivinar. No es como cuando compilas q te dice x Ej :
"invalid conversion from `TCHAR*' to `char'"  entonces lo ves y lo cambias  :xD

Bueno ahora yo tmb quiero saber como hacer jej y para los q kieran probar le dejo algunos links

Para hacer la dll con visual basic
h ttp://www.elguille.info/vb/avanzado/crear_dll_windows_con_vb6_explicado.htm

Y encontre esta info pero habla de cosas parecidas
h ttp://www.recursosvisualbasic.com.ar/htm/tutoriales/interaccion-visual-basic-c++.htm
h ttp://support.microsoft.com/kb/194609/es
h ttp://www.elguille.info/colabora/vb/VB2VC.HTM


Saludos!!


Título: Re: Char[] != String
Publicado por: someRandomCode en 22 Agosto 2011, 03:54 am
Y si probas en vez de stl::string o Byte, un LPTWSTR o LPWSTR?
suerte con eso, si encontras solucion chifla :)