Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   error al pasar una cadena de delphi7 a delphi 10.3 (https://www.clubdelphi.com/foros/showthread.php?t=94808)

tiqui_loquito 28-07-2020 23:42:19

error al pasar una cadena de delphi7 a delphi 10.3
 
Hola a todos

Estoy realizando conexión entre delphi7 y delphi10.3

En delphi7 tenemos el aplicativos que esa el cliente y en delphi10.3 realice una bpl para conectarse a un servicio mediante el post.

Lo que sucede es que envío una cadena desde delphi7 a la bpl pero al llegar a la BPL me llega en caracteres chinos. Se que hay un problema de conversión pero aún no logro encontrar la solución, espero me puedan ayudar.

Código Delphi [-]
var
  vCadena: string;
begin
 vCadena := 'Esta es una cadena de prueba sel servico';

 TU_ServicioCliente.ServicioPrueba(vCadena);//procedimiento en la BPL

Gracias

tiqui_loquito 29-07-2020 01:20:08

Lo solucione
 
Solucione el inconveniente con algo de investigación y cacharreo

Por ahora me ha funcionado, tengo que ver con cadenas con más caracteres.

En delphi7 define la variable como AnsiString

Código Delphi [-]
var
 vCadena: AnsiString;
begin
 vCadena := 'Esta es una cadena de prueba sel servico';

y en el servicio igual. Aunque me toco usar UTF8ToWideString, ya que al asignar la variable al label me la enviaba vacía.

Código Delphi [-]
procedure TForm2.validarCadena(pCadena: AnsiString);
begin
  Label1.Caption :=  UTF8ToWideString(pCadena);


Espero a alguien le sea de ayuda alguna vez

MaxiDucoli 29-07-2020 01:20:34

No será problemas con la configuración UTF-8?

ElKurgan 29-07-2020 16:28:13

Este problema se ha tratado muchas veces en el foro. A partir de la versión 2009 de Delphi, los antiguos String son ahora AnsiString, y los antiguos WideString son los actuales String. Lo mismo pasa con PChar y PAnsiChar. Todo ello con vistas a soportar Unicode en la herramienta.

Saludos

Al González 07-09-2020 06:02:19

Cita:

Empezado por ElKurgan (Mensaje 538134)
A partir de la versión 2009 de Delphi, los antiguos String son ahora AnsiString, y los antiguos WideString son los actuales String. Lo mismo pasa con PChar y PAnsiChar. Todo ello con vistas a soportar Unicode

Me siento obligado a enmendar una pequeña parte de tu respuesta, ElKurgan. Qué gusto leerte nuevamente, por cierto. :)

WideString sigue siendo único en su diseño y comportamiento. Ciertamente es Unicode como el String actual, y el valor de ambos se representa como una matriz (array) unidimensional de WideChars. Pero tienen una diferencia importante:

Código Delphi [-]
String1 := String2;
hace que String1 apunte a la misma dirección de memoria que String2, sin copiar realmente ningún carácter. Solo se incrementa en 1 el contador de referencias de la cadena, un pequeño campo numérico interno que indica cuántas variables String están apuntando al mismo contenido. String (o UnicodeString) es un tipo de dato eficiente y ágil para tratar con cadenas de caracteres.

Mientras que
Código Delphi [-]
WideString1 := WideString2;
realmente crea una copia del valor de WideString2, de tal manera que resulta en dos cadenas con los mismos caracteres, y por lógica en un mayor consumo de memoria. A diferencia de String, WideString no usa un contador de referencias. Este tipo de dato es apropiado para usarlo con interfaces COM, donde las cadenas expuestas por la interfaz (en forma de propiedades) o recibidas por la misma (en forma de parámetros) no emplean un contador de referencias.


La franja horaria es GMT +2. Ahora son las 18:37:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi