<div dir="ltr">Hola Miguel,<div class="gmail_extra"><br><div class="gmail_quote">2013/3/29 miguel Fernandez <span dir="ltr"><<a href="mailto:mafolongo@hotmail.com" target="_blank">mafolongo@hotmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">


<div><div dir="ltr">Buenas tardes amigos, soy nuevo en la programación de c++, sin embargo tengo tiempo en las listas de correo de cconclase, esta es la primera vez que escribo así que espero y agradezco que sepan perdonar mis errores...<br>
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:<br>
<br>[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*)'<br><br>
Como soy nuevo no estoy muy familiarizado con los errores y cómo solucinarlos todos... ¿Qué puedo hacer para solucionar el problema?<br><br></div></div></blockquote><div><br></div><div style>El error está en que usas la función 'CryptStringToBinaryA()', pero le pasas una cadena de Unicode (representado por 'WCHAR'), cuando esperaba una cadena de tipo ASCII (representado por 'CHAR'). En MS-Windows, la gran mayoría de las funciones es macros. Cada macro se basa en parejas de funciones al estilo de: 'xxxxA()' para la versión ASCII y 'xxxxW()' para la versión de Unicode, que usa 'WCHAR' para representar cada carácter de Unicode.</div>
<div style><br></div><div style>La solución es indicar previamente que quieres compilar tu código fuente como Unicode. La forma más sencilla es #definiendo la constante simbólica UNICODE al comienzo del fichero de cabecera, y antes de #incluir los ficheros de cabecera del API de MS-Windows. Por ejemplo,<br>
</div><div style><br></div><div style>#define UNICODE</div><div style>#include <windows.h></div><div style>...</div><div style><br></div><div style>Ahora todas esas macros se definirán con las versiones Unicode, y así no tienes que "tocar" el resto de tu código fuente.</div>
<div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><div dir="ltr">A continuación expongo un extracto del código:<br>
<br>    BOOL bIsSuccess = FALSE;<br>    WCHAR szKey[] = L"01000000D08C9DDF0115D1118C7A00C04FC297EB01000...";<br></div></div></blockquote><div><br></div><div style>Cuando quieras usar caracteres literales en MS-Windows, sugiero que uses la macro TEXT(), que se basa en la misma idea mencionada previamente: se elegirá la versión ASCII o la versión Unicode. Esto sería,</div>
<div style><br></div><div style>TCHAR szKey[] = TEXT( "01000000D08C9DDF0115D1118C7A00C04FC297EB01000..." );</div><div><br></div><div style>El tipo 'TCHAR' es otra macro que cambiará según si usemos ASCII o Unicode.</div>
<div style><br></div><div style>Obviamente, si sabemos que DEBE ser Unicode, entonces no uses estas macros ni tipos, por lo que debes asegurarte de que el código fuente use la versión Unicode de todas sus funciones.</div>
</div></div><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div><div class="gmail_extra" style>Espero que esto te ayude.</div><div class="gmail_extra"><br></div><div class="gmail_extra" style>Steven</div>
<div class="gmail_extra" style><br></div></div>