Précédent   Forum du club des développeurs et IT Pro > Autres langages > Pascal > Free Pascal
Free Pascal Le compilateur Pascal multiplateforme
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 15/11/2012, 23h09   #1
free07
Membre habitué
 
Inscription : mars 2005
Messages : 167
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 167
Points : 107
Points : 107
Par défaut Problème de conversion de NSString en string

Bonjour à tous,

J'ai un problème de conversion de NSString en string :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
type
  TDM_AccesBase = class(TDataModule)
  procedure DataModuleCreate(Sender: TObject);
  private
    {$IFDEF FPC}
      pAB_sFileName : NSString;
    {$ENDIF}
...
procedure TDM_AccesBase.DataModuleCreate(Sender: TObject);
begin
{$IFDEF FPC}
  pAB_sFileName := MyDirectory.stringByAppendingPathComponent(NSSTR(PChar('/MyDB.sqlite')));
{$ENDIF}
end;
 
{$IFDEF FPC}
function TDM_AccesBase.MyDirectory : NSString;
var
  paths : NSArray;
  fileName : NSString;
 
begin
  paths := NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, true);
  fileName := paths.objectAtIndex(0);
  Result := fileName;
end;
{$ENDIF}
 
...
 
var NomFichier : string;
 
begin
{$IFDEF FPC}
	try
 NomFichier := pAB_sFileName.UTF8string;  <---- ça plante la
....
Pourquoi cela plante à l'affectation de la variable NomFichier, pourtant UTF8string fait la conversion, non ?
__________________
  • J'ai des questions à toutes vos réponses.
  • Rien de ce qu'il est bon de savoir ne peut être compris avec l'esprit.
  • L'homme exploite l'homme et parfois c'est le contraire.
  • Ce n'est pas que j'aie vraiment peur de mourir mais je préfère ne pas être la quand ça arrivera.
Woody Allen
free07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2012, 04h31   #2
Paul TOTH
Expert Confirmé Sénior
 
Avatar de Paul TOTH
 
Homme Paul TOTH
Freelance
Inscription : novembre 2002
Messages : 4 404
Détails du profil
Informations personnelles :
Nom : Homme Paul TOTH
Âge : 43
Localisation : Réunion

Informations professionnelles :
Activité : Freelance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2002
Messages : 4 404
Points : 10 757
Points : 10 757
Citation:
Envoyé par free07 Voir le message
Bonjour à tous,

J'ai un problème de conversion de NSString en string :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
type
  TDM_AccesBase = class(TDataModule)
  procedure DataModuleCreate(Sender: TObject);
  private
    {$IFDEF FPC}
      pAB_sFileName : NSString;
    {$ENDIF}
...
procedure TDM_AccesBase.DataModuleCreate(Sender: TObject);
begin
{$IFDEF FPC}
  pAB_sFileName := MyDirectory.stringByAppendingPathComponent(NSSTR(PChar('/MyDB.sqlite')));
{$ENDIF}
end;
 
{$IFDEF FPC}
function TDM_AccesBase.MyDirectory : NSString;
var
  paths : NSArray;
  fileName : NSString;
 
begin
  paths := NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, true);
  fileName := paths.objectAtIndex(0);
  Result := fileName;
end;
{$ENDIF}
 
...
 
var NomFichier : string;
 
begin
{$IFDEF FPC}
	try
 NomFichier := pAB_sFileName.UTF8string;  <---- ça plante la
....
Pourquoi cela plante à l'affectation de la variable NomFichier, pourtant UTF8string fait la conversion, non ?
perso j'utilise getCharacters_range()
__________________
Developpez.com: Mes articles, forum FlashPascal
Entreprise: Execute SARL
Produits : UPnP, RemoteOffice, FlashPascal
Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5%
Paul TOTH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2012, 09h57   #3
free07
Membre habitué
 
Inscription : mars 2005
Messages : 167
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 167
Points : 107
Points : 107
Bonjour Paul,

Merci pour ta suggestion mais je n'arrive pas à trouver de la doc qui parle de getCharacters_range ( même dans la doc library d'apple )
Après des heures de recherche, j'ai rien trouvé dans la doc d'apple et sur google seulement un ou deux exemples mais il sont en objective c et parle de getCharacters:range

Apparemment c'est getCharacters_range(buffer, range) ??

Buffer est un pointeur sur la chaine de caractère convertit et range le nombre de caractères à convertir ??

Mais comment on l'utilises réellement, aurais tu un exemple à me donner ou mieux comment l'utiliserais tu dans mon code ?

Merci d'avance
__________________
  • J'ai des questions à toutes vos réponses.
  • Rien de ce qu'il est bon de savoir ne peut être compris avec l'esprit.
  • L'homme exploite l'homme et parfois c'est le contraire.
  • Ce n'est pas que j'aie vraiment peur de mourir mais je préfère ne pas être la quand ça arrivera.
Woody Allen
free07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2012, 11h58   #4
Paul TOTH
Expert Confirmé Sénior
 
Avatar de Paul TOTH
 
Homme Paul TOTH
Freelance
Inscription : novembre 2002
Messages : 4 404
Détails du profil
Informations personnelles :
Nom : Homme Paul TOTH
Âge : 43
Localisation : Réunion

Informations professionnelles :
Activité : Freelance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2002
Messages : 4 404
Points : 10 757
Points : 10 757
je l'utilise sous Delphi XE2 (string = UnicodeString) via objc_msgSend()...donc je ne connais pas la syntaxe FreePascal, mais le principe est là

Code :
1
2
3
4
5
6
7
8
9
10
 
function NSStringToStr(NS: NSString): string;
var
  R: NSRange;
begin
  R.location := 0;
  R.length := NS.Length;
  SetLength(Result, R.length);
  NS.getCharacters(@Result[1], R);
end;
mais je serais surpris que FreePascal ne propose pas une fonction toute faite pour cela...
__________________
Developpez.com: Mes articles, forum FlashPascal
Entreprise: Execute SARL
Produits : UPnP, RemoteOffice, FlashPascal
Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5%
Paul TOTH est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 19/11/2012, 14h25   #5
free07
Membre habitué
 
Inscription : mars 2005
Messages : 167
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 167
Points : 107
Points : 107
Citation:
Envoyé par Paul TOTH Voir le message
je l'utilise sous Delphi XE2 (string = UnicodeString) via objc_msgSend()...donc je ne connais pas la syntaxe FreePascal, mais le principe est là

Code :
1
2
3
4
5
6
7
8
9
10
 
function NSStringToStr(NS: NSString): string;
var
  R: NSRange;
begin
  R.location := 0;
  R.length := NS.Length;
  SetLength(Result, R.length);
  NS.getCharacters(@Result[1], R);
end;
Ok, en fait c'est getCharacters, je comprend mieux ( j'ai cherché avec getCharacters_rang )

Citation:
Envoyé par Paul TOTH Voir le message
j
mais je serais surpris que FreePascal ne propose pas une fonction toute faite pour cela...
Et bien j'ai cherché et j'ai pas trouvé mais en même temps, je n'ai pas de doc exhaustive sur free pascal.
Merci pour ton aide.
__________________
  • J'ai des questions à toutes vos réponses.
  • Rien de ce qu'il est bon de savoir ne peut être compris avec l'esprit.
  • L'homme exploite l'homme et parfois c'est le contraire.
  • Ce n'est pas que j'aie vraiment peur de mourir mais je préfère ne pas être la quand ça arrivera.
Woody Allen
free07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h11.


 
 
 
 
Partenaires

Hébergement Web