Bonjour,
J’ai réalisé une application sous Delphi 2005 avec la VCL Win 32 (Programme A). Depuis cette application, je dois récupérer une valeur par un WebService. J’ai donc écrit un autre programme sous Delphi 2005 avec la VCL .NET (Programme B).
Lorsque je lance le programme le Programme B à partir d’un bouton du Programme A, j’obtient une erreur non gérée par l’application. Voici une partie du code du programme A :
Voici le code de EcrireFichier :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 var CodeErreur : integer; begin EcrireFichier('C:\ProgAAccount.txt', Trim(eNumCompte.Text)); CodeErreur := ShellExecute(0, 'OPEN', 'C:\Program Files\ProgrammeB.exe', Nil, Nil, SW_SHOW); if CodeErreur <=32 then ShowMessage(SysErrorMessage(CodeErreur)); else ESMS.Text := ' ' + LireAccount; end;
L’erreur est déclenchée par le lancement du ProgrammeB.exe. En faisant des recherches, je me suis aperçu que l’erreur vient du type de chaîne utilisé. Par le programme A, j’écrit un fichier de type TextFile en VCL (création du fichier .txt sur le disque).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 procedure TForm1.EcrireFichier(NomFichier : string; Texte : string); var F : TextFile; Res : integer; begin AssignFile(F, NomFichier); {$I-} Rewrite(F); {$I+} Res := IOResult; if Res = 0 then begin Try WriteLn(F, Texte); Finally CloseFile(F); end; end end;
Avec le code suivant dans le programme B, j’obtient l’erreur citée plus haut au niveau de Result := Service.GetMessageLimit :
La procédure du programme B qui appelle le WebService est la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 constructor TWinform2.Create; begin inherited Create; InitializeComponent; Account := LireFichier('C:\ ProgAAccount txt'); end;
Si par contre, je renseigne en "dur" les valeurs comme suit, le programme fonctionne bien et j’ai bien une valeur en retour du WebService :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 procedure TWinform2.BSynchro_Click(sender: System.Object; e: System.EventArgs); begin myHeader := MessengerHeader.Create; myHeader.Account := Account; Service := accountService.AccountService.AccountService.Create; Service.MessengerHeaderValue := myHeader; Result := Service.GetMessageLimit; NbSMS.Text := IntToStr(Result); //Mets à jour le champs end;
En fait, je me pose la question au niveau de la chaîne : comme j’écris un fichier texte en Delphi Win32 sur le disque, puis je lis la valeur de ce fichier par l’autre programme réalisé en Delphi .Net, l’erreur doit venir du type de string. Est-ce que je dois utiliser AnsiString, PChar ou autre pour lire une fichier texte ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 constructor TWinform2.Create; begin inherited Create; InitializeComponent; Account := 'EX0055896'; end;
Pour lire le fichier, voici la procédure que j’ai créé depuis le programme B :
Le fichier me renvoie bien pourtant la bonne valeur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 function TWinform2.LireFichier(ChemFichier : string) : string; var FileInfo : System.IO.FileInfo; Reader : System.IO.StreamReader; begin Result := ''; FileInfo := System.IO.FileInfo.Create(ChemFichier); Reader := FileInfo.OpenText; Console.WriteLine(Reader.ReadToEnd); Result := Reader.ReadToEnd; Reader.Close; Console.Readline; end;
Merci pour votre aide !
Partager