Bonjour,
je cherche de la documentation récente sur l'utilisation des diverses formes de strings. (AnsiString, UTF8String...)
Un de mes anciens programmes fonctionne sous Lazarus avec des librairies dynamiques (.dll ou .so) écrites elles aussi en Lazarus. L'ensemble est compilé en 0.9.28. RAS.
J'ai voulu recompiler l'ensemble (dll et programme) en 0.9.29. Et j'ai quelques soucis avec les pChar(string).
J'obtiens fréquemment (mais pas systématiquement ?) des messages du genre...
fwaformX.pas(597,34) Error: Illegal type conversion: "ShortString" to "^Char"
Le code de la dll suivant:
...appelé ainsi par le programme
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 function IsLengthOK(pReq : PChar) : boolean; cdecl; //ou stdcall; var sREQtmp : String; begin Result := False; sREQtmp := pReq; if length(sREQtmp) > 4 then Result := True; end;
...génère l'erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 var sREQ : String; begin [...] if not IsLengthOK(pChar(sREQ)) then
En 0.9.29, j'ai essayé l'option {$H+}{$LongString On} que je n'utilisais pas en 0.9.28 : sans succès. Mais, si je remplace "sReq : String;" par "sReq : AnsiString;" ou par "sReq : UTF8String;", il n'y a pas de problème... Jusqu'à présent, je pensais que String ~ LongString et pas ShortString... Est-ce que c'est une évolution de Lazarus ? A la rigueur, je m'en moque... à condition que je puisse "mesurer" l'implication dans mes programmes de l'utilisation de AnsiString et UTF8String sachant qu'ils doivent fonctionner sous Win et Nux... et là j'ai du mal à réellement comprendre la théorie Lazarusienne sur la question et reste toujours en pratique très "expérimental" sur certains composants avec les UTF8Toxxx.
Bref, quelqu'un a une idée précise sur la question des pchar(string) ?
Merci d'avance.
Cordialement. Gilles
Partager