elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Personaliza-Escoge el diseño del foro que más te guste.


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Error en CryptStringToBinary usando wchar
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Error en CryptStringToBinary usando wchar  (Leído 1,198 veces)
MeTaD

Desconectado Desconectado

Mensajes: 69


Ver Perfil
Error en CryptStringToBinary usando wchar
« en: 30 Marzo 2013, 02:01 »

Buenas tardes amigos, soy nuevo en la programación de c++, así que porfavor disculpen mi ignorancia...
Mi problema está ocurriendo al tratar de Convertir una cadena de texto extremadamente larga (461 carácteres) a hexadecimal usando CryptStringToBinary... el problema es que debido a la cantidad de carácteres debo utilizar WCHAR para almacenar dicha cadena... lo que me arroja el siguiente error:

Citar
[Error] cannot convert 'WCHAR* {aka wchar_t*}' to 'LPCSTR {aka const char*}' for argument '1' to 'WINBOOL CryptStringToBinaryA(LPCSTR, DWORD, DWORD, BYTE*, DWORD*, DWORD*, DWORD*)'

Como soy nuevo no estoy muy familiarizado con los errores y cómo solucinarlos todos... ¿Qué puedo hacer para solucionar el problema?

A continuación expongo un extracto del código:

Código:
    BOOL bIsSuccess = FALSE;
    WCHAR szKey[] = L"01000000D08C9DDF0115D1118C7A00C04FC297EB01000...";
    BYTE byKey[1024];
    DWORD cbBinary, dwFlags, dwSkip;
    bIsSuccess = CryptStringToBinary (szKey, lstrlenW(szKey), CRYPT_STRING_HEX, byKey, &cbBinary, &dwSkip, &dwFlags);

Si es preciso poner el código completo solo es cuestión de pedirlo (aunque me temo que es un poco extenso)

Muchas gracias de antemano,
Metad.


En línea

IEAX

Desconectado Desconectado

Mensajes: 46


Crianosfera 3.0 in Comming :P


Ver Perfil
Re: Error en CryptStringToBinary usando wchar
« Respuesta #1 en: 30 Marzo 2013, 02:12 »

Citar
[Error] cannot convert 'WCHAR* {aka wchar_t*}' to 'LPCSTR {aka const char*}' for argument '1' to 'WINBOOL CryptStringToBinaryA(LPCSTR, DWORD, DWORD, BYTE*, DWORD*, DWORD*, DWORD*)'

LPCSTR no es una cadena unicode sino ansi:

Código
  1. typedef __nullterminated CONST CHAR *LPCSTR, *PCSTR;

Las correciones serían así sino me equivoco :P

Código:
CHAR szKey[] = "01000000D08C9DDF0115D1118C7A00C04FC297EB01000...";
...
lstrlenA(szKey)


B#


En línea

MeTaD

Desconectado Desconectado

Mensajes: 69


Ver Perfil
Re: Error en CryptStringToBinary usando wchar
« Respuesta #2 en: 30 Marzo 2013, 02:24 »



LPCSTR no es una cadena unicode sino ansi:

Código
  1. typedef __nullterminated CONST CHAR *LPCSTR, *PCSTR;

Las correciones serían así sino me equivoco :P

Código:
CHAR szKey[] = "01000000D08C9DDF0115D1118C7A00C04FC297EB01000...";
...
lstrlenA(szKey)


B#

Gracias por tu pronta respuesta amigo, pero surge el siguiente problema:

Si no cambio lstrLenW(szKey) por lstrlenA(szKey) da el siguiente error:

Citar
[Error] cannot convert 'CHAR* {aka char*}' to 'LPCWSTR {aka const wchar_t*}' for argument '1' to 'int lstrlenW(LPCWSTR)'

Luego de realizar el cambio da el siguiente error:

Citar
undefined reference to `_imp__CryptStringToBinaryA@28'
[Error] ld returned 1 exit status

¿Qué está suciendiendo?
En línea

IEAX

Desconectado Desconectado

Mensajes: 46


Crianosfera 3.0 in Comming :P


Ver Perfil
Re: Error en CryptStringToBinary usando wchar
« Respuesta #3 en: 30 Marzo 2013, 02:43 »

Gracias por tu pronta respuesta amigo, pero surge el siguiente problema:

Si no cambio lstrLenW(szKey) por lstrlenA(szKey) da el siguiente error:
Citar
[Error] cannot convert 'CHAR* {aka char*}' to 'LPCWSTR {aka const wchar_t*}' for argument '1' to 'int lstrlenW(LPCWSTR)'

Es porque estás tratando de usar una cadena ansi en una función que recibe una cadena unicode...

http://msdn.microsoft.com/en-us/library/windows/desktop/ff381407(v=vs.85).aspx

Luego de realizar el cambio da el siguiente error:

Citar
undefined reference to `_imp__CryptStringToBinaryA@28'
[Error] ld returned 1 exit status

¿Qué está suciendiendo?

El compilador no tiene la referencia de que modulo debe importar esa función (Tenés que agregar la librería estática de la dll Crypt32.dll)


B#
En línea

MeTaD

Desconectado Desconectado

Mensajes: 69


Ver Perfil
Re: Error en CryptStringToBinary usando wchar
« Respuesta #4 en: 30 Marzo 2013, 02:46 »



Es porque estás tratando de usar una cadena ansi en una función que recibe una cadena unicode...

http://msdn.microsoft.com/en-us/library/windows/desktop/ff381407(v=vs.85).aspx

¿Qué está suciendiendo?

El compilador no tiene la referencia de que modulo debe importar esa función (Tenés que agregar la librería estática de la dll Crypt32.dll)


B#

No entiendo, si la tiene:
Citar
#pragma comment (lib, "Crypt32.lib")
¿Es eso?

¿Cómo soluciono lo primero?, de verdad que estoy muy básico pero me encantaría poder solucionar este obstáculo... porfavor.
En línea

IEAX

Desconectado Desconectado

Mensajes: 46


Crianosfera 3.0 in Comming :P


Ver Perfil
Re: Error en CryptStringToBinary usando wchar
« Respuesta #5 en: 30 Marzo 2013, 03:02 »

#pragma comment (lib,"Crypt32.lib")

Si era eso, pero al parecer tu librería estática no contiene la definición de esa función... lo cual es raro :S

¿Cómo soluciono lo primero?, de verdad que estoy muy básico pero me encantaría poder solucionar este obstáculo... porfavor.

Te dejo el link de como lo hice yo para que no te hagas más líos :S

https://rapidshare.com/files/2056454809/CryptStringBinary.rar


B#
En línea

MeTaD

Desconectado Desconectado

Mensajes: 69


Ver Perfil
Re: Error en CryptStringToBinary usando wchar
« Respuesta #6 en: 30 Marzo 2013, 03:04 »

Si era eso, pero al parecer tu librería estática no contiene la definición de esa función... lo cual es raro :S

Te dejo el link de como lo hice yo para que no te hagas más líos :S

https://rapidshare.com/files/2056454809/CryptStringBinary.rar


B#


Gracias por tu disposición amigo, al intentar descargar dice
Citar
Download permission denied by uploader. (0b67c2f5)
jajajaja hoy no es mi día jajajaja
En línea

IEAX

Desconectado Desconectado

Mensajes: 46


Crianosfera 3.0 in Comming :P


Ver Perfil
Re: Error en CryptStringToBinary usando wchar
« Respuesta #7 en: 30 Marzo 2013, 03:05 »

probá de nuevo ya lo solucioné :P

PD: No sé si está bien implementado pero compila eso seguro...


B#
« Última modificación: 30 Marzo 2013, 03:08 por IEAX » En línea

MeTaD

Desconectado Desconectado

Mensajes: 69


Ver Perfil
Re: Error en CryptStringToBinary usando wchar
« Respuesta #8 en: 30 Marzo 2013, 03:08 »

Amigo, una última pregunta antes de revisar tu archivo... ¿Cómo haces para programar en Visual Studio sin crear dependencia a .net framwork?
En línea

IEAX

Desconectado Desconectado

Mensajes: 46


Crianosfera 3.0 in Comming :P


Ver Perfil
Re: Error en CryptStringToBinary usando wchar
« Respuesta #9 en: 30 Marzo 2013, 03:17 »

Amigo, una última pregunta antes de revisar tu archivo... ¿Cómo haces para programar en Visual Studio sin crear dependencia a .net framwork?

No sé a que te referís, supuestamente si creas un proyecto de aplicación Win32 no tiene porque agregarte dependencia a .net framework... (eso creo)


B#
En línea

MeTaD

Desconectado Desconectado

Mensajes: 69


Ver Perfil
Re: Error en CryptStringToBinary usando wchar
« Respuesta #10 en: 30 Marzo 2013, 03:22 »

No sé a que te referís, supuestamente si creas un proyecto de aplicación Win32 no tiene porque agregarte dependencia a .net framework... (eso creo)


B#

Vale, no importa eso ahora jejeje gracias de todas formas (aunque creo que en una pc sin .net framework no te iniciará la aplicación, repito, CREO), estoy teniendo otro problema... en el proyecto completo es necesario utilizar el archivo ntdef.h pero visual studio me da error, dice que no lo encuentra... ¿qué puedo hacer

Es algo problemática mi situación, por un lado, con Dev-c++ tengo problema con CryptStringToBinary y por el otro con VC++ me da el problema de ntdef.h :S
En línea

IEAX

Desconectado Desconectado

Mensajes: 46


Crianosfera 3.0 in Comming :P


Ver Perfil
Re: Error en CryptStringToBinary usando wchar
« Respuesta #11 en: 30 Marzo 2013, 04:03 »

Vale, no importa eso ahora jejeje gracias de todas formas (aunque creo que en una pc sin .net framework no te iniciará la aplicación, repito, CREO), estoy teniendo otro problema... en el proyecto completo es necesario utilizar el archivo ntdef.h pero visual studio me da error, dice que no lo encuentra... ¿qué puedo hacer

Copiar las definiciones en los archivos que necesites (?

Es algo problemática mi situación, por un lado, con Dev-c++ tengo problema con CryptStringToBinary y por el otro con VC++ me da el problema de ntdef.h :S

Con Dev-C+Mingw 3.4.2 tuve que llamar a CryptStringToBinary usando LoadLibrary y GetProcAddress, en cuanto al archivo ntdef.h no está en la sdk de visual pero está en la wdk y las definiciones de la wdk y de mingw en el archivo ntdef.h son completamente distintas  :-(


B#
En línea

MeTaD

Desconectado Desconectado

Mensajes: 69


Ver Perfil
Re: Error en CryptStringToBinary usando wchar
« Respuesta #12 en: 30 Marzo 2013, 04:19 »

Copiar las definiciones en los archivos que necesites (?

Con Dev-C+Mingw 3.4.2 tuve que llamar a CryptStringToBinary usando LoadLibrary y GetProcAddress, en cuanto al archivo ntdef.h no está en la sdk de visual pero está en la wdk y las definiciones de la wdk y de mingw en el archivo ntdef.h son completamente distintas  :-(


B#
Podrías por favor mostrarme cómo lo hiciste con dev-c++??

PD: jejeje para aprender me gusta más empezar por lo difícil  :laugh:
En línea

IEAX

Desconectado Desconectado

Mensajes: 46


Crianosfera 3.0 in Comming :P


Ver Perfil
Re: Error en CryptStringToBinary usando wchar
« Respuesta #13 en: 30 Marzo 2013, 04:38 »

Podrías por favor mostrarme cómo lo hiciste con dev-c++??

PD: jejeje para aprender me gusta más empezar por lo difícil  :laugh:

Código
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <conio.h>
  4.  
  5. #define CRYPT_STRING_HEX 0x00000004
  6.  
  7. typedef BOOL (WINAPI *TCryptStringToBinaryW)(LPCWSTR pszString,DWORD cchString,DWORD dwFlags,BYTE *pbBinary,DWORD *pcbBinary,DWORD *pdwSkip,DWORD *pdwFlags);
  8. TCryptStringToBinaryW pCryptStringToBinaryW=NULL;
  9.  
  10. int main()
  11. {
  12.    pCryptStringToBinaryW=(TCryptStringToBinaryW)GetProcAddress(LoadLibrary("Crypt32.dll"),"CryptStringToBinaryW");
  13.    if(!pCryptStringToBinaryW){printf("Error 404: CrypStringToBinaryW not found :S\n");return 1;}
  14.  
  15.    BOOL bIsSuccess = FALSE;
  16.    WCHAR szKey[] = L"01000000D08C9DDF0115D1118C7A00C04FC297EB01000...";
  17.    BYTE byKey[1024];
  18.    DWORD cbBinary, dwFlags, dwSkip;
  19.    bIsSuccess = pCryptStringToBinaryW(szKey, lstrlenW(szKey), CRYPT_STRING_HEX, byKey, &cbBinary, &dwSkip, &dwFlags);
  20.    printf("%i/%i",bIsSuccess,byKey);
  21.    getch();
  22.    return 0;
  23. }
  24.  


B#
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Error al ejecutar usando time.h
Programación C/C++
Kasswed 7 897 Último mensaje 26 Febrero 2006, 20:37
por Kasswed
Error coma flotante usando wlaninject
Hacking Wireless
elPRiNCiPiTo 2 580 Último mensaje 29 Abril 2007, 15:44
por *dudux
Error usando API de Twitter
Desarrollo Web
WorkingAPI 4 2,206 Último mensaje 1 Agosto 2011, 14:22
por WorkingAPI
[MOD] Mensaje de error: Dma controller error - fatal error system halted « 1 2 »
Hardware
evgeni1970 14 7,063 Último mensaje 6 Noviembre 2011, 22:27
por evgeni1970
convertir un char a tchar, wchar etc.
Programación C/C++
YagamiIori2002 6 1,523 Último mensaje 26 Abril 2012, 19:06
por YagamiIori2002
Powered by SMF 1.1.19 | SMF © 2006-2008, Simple Machines