|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||||||
|
Invité régulier
![]() Inscription : mars 2003 Messages : 34 ![]() |
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 : Code :
Code :
Avec le code suivant dans le programme B, j’obtient l’erreur citée plus haut au niveau de Result := Service.GetMessageLimit : Code :
Code :
Code :
Pour lire le fichier, voici la procédure que j’ai créé depuis le programme B : Code :
Merci pour votre aide ! |
||||||||||||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() ![]() Inscription : novembre 2007 Messages : 1 519 ![]() |
Bonjour,
En fait si je regarde l'implémentation que tu nous as fournit ici pour ta méthode LireFichier, il y a une erreur selon moi. Tu fais un ReadToEnd pour l'afficher sur la console puis encore un ReadToEnd pour valuer le résultat sauf qu'à ce moment là le curseur de lecture est déjà à la fin donc ta fonction ne retourne rien au final. Essayes plutôt de le coder comme ça : Code :
__________________
La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème Pas de sollicitations techniques par MP -
|
||
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : mars 2003 Messages : 34 ![]() |
Merci d'avoir répondu. Non, le problème doit être ailleurs car ma fonction renvoie bien une valeur, celle du contenu du fichier .TXT. J'ai modifié en suivant votre réponse, j'ai toujours la même erreur.
Le fichier contient un mot de passe pour accéder au WebService. En fait, l'erreur retourne le message "Autentification failed". J'ai comme l'impression qu'il ne "reconnait" pas le formatage ou le type (string, AnsiString, etc) alors que la valeur est la bonne. Je n'obtient pas d'erreur si je code en "dur" comme ceci : Account := 'EX0087965'; Mais, j'ai besoin de récupérer la valeur Account car elle est différente pour chacun de mes clients, donc je code comme cela : Account := LireFichier ('C:\SynchroSMS\SynchroSMSAccount.txt'); mais la procédure renvoie l'erreur ! Est-ce que vous pouvez aussi m'indiquer une autre méthode pour lire un fichier texte créé sur le disque ? Merci d'avance, je maitrise bien Delphi 2005 en Win32 mais pas en .NET. |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() ![]() Inscription : novembre 2007 Messages : 1 519 ![]() |
Quelle est la valeur renvoyée par la fonction LireFonction alors ? Ou bien l'erreur qu'elle génère.
__________________
La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème Pas de sollicitations techniques par MP -
|
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : mars 2003 Messages : 34 ![]() |
La valeur est la bonne, c'est à dire celle que contient le fichier .txt, c'est à dire "EX0055896". L'erreur retournée par le Web Service est "Le projet X a rencontré une classe d'exception non gérée System.Web.Services.Protocols.SoapException avec le message 'Authentification Failed'.
Ce que je ne comprend pas, c'est pourquoi en "dur" dans le code, il n' ya pas de problème de connexion, tout se passe bien alors que qaund je fais appel par la procédure LireFichier, cette erreur est retournée. Je suppose que cela ne peut provenir que du texte récupéré mais pourtant c'est la même valeur. Est-ce ma procédure LireFichier qui n'est pas correcte ? La chaine récupérée n'est elle pas du bon format ? J'ai fini le programme, il me reste juste ce problème à résoudre. Merci encore pour votre aide car kje ne maitrise pas le Delphi 2005 .NET. |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() ![]() Inscription : novembre 2007 Messages : 1 519 ![]() |
Sur ce problème j'ai l'intime conviction que l'erreur est sur l'encodage des caractères.
Essayez de forcer l'encodage en ANSI dans le second paramètre du constructeur de FileInfo. Ou sinon remplacer toutes les occurences de String par WideString peut-être.
__________________
La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème Pas de sollicitations techniques par MP -
|
|
|
00
|
|
|
#7 |
|
Invité régulier
![]() Inscription : mars 2003 Messages : 34 ![]() |
Merci pour votre aide :
En effectuant de nombreux tests, j'ai remarqué que le fichier .TXT crée par mon programme A (en Delphi Win32) affiche 22 octets dans l'explorer. J'ai crée "à la main" un même fichier texte TXT, l'explorer m'affiche 20 octets, il y a une différence de 2 octets. Dans le programme B (en Delphi 2005.Net), le déboggeur m'affiche un retour à la ligne, ce qui explique pourquoi la valeur envoyé au serveur n'est pas la même ! Donc si je tape : Result := Reader.ReadToEnd , j'ai une erreur par contre : Result := Trim(Reader.ReadToEnd) fonctionne correctement ! Le Trim règle le problème ! Le problème est résolu mais si vous avez une explication pour mieux comprendre, je suis vivement intéressé. Cordialement |
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() ![]() Inscription : novembre 2007 Messages : 1 519 ![]() |
Bonjour, les deux octets supplémentaires doivent être un BOM.
Plutôt que de faire un Trim je suggères plutôt de déplacer le curseur de lecture de 2 octet depuis le début au niveau du Stream puis lire jusqu'à la fin.
__________________
La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème Pas de sollicitations techniques par MP -
|
|
|
00
|
|
|
#9 |
|
Invité régulier
![]() Inscription : mars 2003 Messages : 34 ![]() |
OK, merci pour votre réponse : problème résolu !
|
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() ![]() Inscription : novembre 2007 Messages : 1 519 ![]() |
Merci de cliquer sur le bouton
en bas de la discussion
__________________
La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème Pas de sollicitations techniques par MP -
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com