Ver Mensaje Individual
  #6  
Antiguo 29-10-2012
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Reputación: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Comandant,

Revisa estos comentarios en el siguiente link: http://delphi.jmrds.com/?q=node/43
Cita:
Estoy teniendo algunos problemas al usar el sistema de CryptBinaryToString en Delphi 2010, no se si el problema vendrá ocasionado
por el nuevo IDE. ¿Podrías informarme de si tienes algún tipo de información en este tipo de sistema?

Gracias por anticipado.

Saludos.

Víctor.
Cita:
Esa versión de Delphi utiliza caracteres unicode por defecto, así que el tamaño en bytes de los caracteres es diferente.
No tengo Delphi 2010 para probarlo pero prueba a cambiar el tipo String por AnsiString y PChar por PAnsiChar.

Con eso debería funcionar, pruebalo y nos lo cuentas.
Revisa estos comentarios en el siguiente link: http://delphi.jmrds.com/?q=node/83
Cita:
Excelente artículo!!!

sin embargo me quedo con la duda de cómo funciona para strings unicode?

Un saludo seoane, desde el otro lado del charco
Código Delphi [-]
Pues no te quedes con la duda jachguate, funciona perfectamente.

Solamente hay que saber como utilizar las funciones, por ejemplo:

procedure TestWideStrings;
var
  l: Integer;
  Str: WideString;
  P: PWideChar;
begin
  Str:= '这样还经营';
  MessageBoxW(0,PWideChar('Texto original: ' + Str),'Test',
    MB_OK or MB_SETFOREGROUND or MB_TASKMODAL);
  Str:= BinToStr(PByteArray(PWideChar(Str)),Length(Str)*Sizeof(WideChar));
  MessageBoxW(0,PWideChar('Texto codificado: ' + Str),'Test',
    MB_OK or MB_SETFOREGROUND or MB_TASKMODAL);
  P:= PWideChar(StrToBin(Str,l));
  try
    Str:= Copy(P,1,l div Sizeof(WideChar));
  finally
    // Siempre hay que acordarse de liberar la memoria
    FreeMem(P);
  end;
  MessageBoxW(0,PWideChar('Texto reconstruido: ' + Str),'Test',
    MB_OK or MB_SETFOREGROUND or MB_TASKMODAL);
end;

En el ejemplo tenemos un texto en chino que guardamos en un WideString.
Para codificarlo no hay mas que pasar su puntero a la función BinToStr, pero teniendo en cuenta
que su tamaño en bytes es el doble que su tamaño en caracteres. Y decodificarlo es todavía mas fácil,
ya que el parámetro "Str" que le pasamos a la función StrToBin es del tipo AnsiString por lo que
delphi ya hace la conversión por nosotros.

Como ves tanto a la hora de codificar como decodificar no hay problemas con las strings Unicode

Saludos
Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 29-10-2012 a las 15:21:40.
Responder Con Cita