Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 15 sur 15
  1. #1
    Candidat au titre de Membre du Club
    Inscrit en
    avril 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 37
    Points : 13
    Points
    13

    Par défaut Delphi10 et Indy10 : où est TidStreamVCL ?

    Bonjour.
    Je dispose de Delphi10 Pro sous Windows 7 et donc de Indy10.
    Ma connection à Internet se fait par une LiveBox que j'ai configurée pour permettre l'accès entrant à mon poste en local.
    Je souhaite échanger un fichier avec des postes connectés sur internet.
    Dans la faq Delphi, "reisubar" donne une réponse complète à cette question en utilisant TidStreamVCL. Malheureusement, je ne dispose pas de cet objet dans ma version Pro de Delphi !!!!
    Mes recherches n'ayant pas abouti, ma question est donc :
    où peut-on trouver la dll contenant TidStreamVCL ?
    Merci d'avance.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    août 2002
    Messages
    1 145
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : août 2002
    Messages : 1 145
    Points : 1 484
    Points
    1 484

    Par défaut

    Apparemment la classe est devenue: TIdStream

    Edit: j'ai dit une bêtise, ça m'apprendra à rechercher trop vite.
    Delphi 7/XE2
    Windows XP/Vista/7

  3. #3
    Expert Confirmé Sénior Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    10 050
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 10 050
    Points : 14 266
    Points
    14 266

    Par défaut

    Delphi 10 = Delphi 2007 ?
    J'ai à la fois Indy 9 et Indy 10 dans mon dossier
    CodeGear\BDS\5.0\Source\Indy\Indy9\IdStream.pas - non trouvé
    CodeGear\BDS\5.0\Source\Indy\Indy10\System\IdStreamVCL.pas - J'ai au mieux une TIdStreamHelperVCL


    Citation Envoyé par cmali67 Voir le message
    Mes recherches n'ayant pas abouti, ma question est donc

    Pense à Rechercher du forum, on y trouve rapidement Undeclared identifer TIdStreamVCL dont les liens indique la suppression de cette classe TIdStreamVCL dont l'utilité semble discutable, son but était de simplifier le code entre Indy VCL et Indy.NET

    Il va falloir retirer cette classe intermédiare et manipulé directement le TMemoryStream !

    Citation Envoyé par cmali67 Voir le message
    où peut-on trouver la dll contenant TidStreamVCL ?
    Pourquoi parles-tu de DLL ?
    C'est soit dans un fichier .PAS comme IdStream.pas contenant TIdStream ou IdStreamVCL.pas contenant TIdStreamHelperVCL
    C'est soit dans un BPL si tu utilises la compilation avec paquet d'éxécution mais cela ne change pas le uses !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Candidat au titre de Membre du Club
    Inscrit en
    avril 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 37
    Points : 13
    Points
    13

    Par défaut

    J'aurais dû, c'est sûr, rechercher dans le forum, sauf que je n'avais pas vu la case "Recherche" !! Manque de pratique sans doute.
    J'ai utilisé TMemoryStream, avec SaveToFile et LoadFromFile.
    Si je lance l'envoi du fichier à partir du Client.exe en double clickant sur son icône vers le Serveur en mode déboguage, le transfert est parfait !!!!
    Mais si je lance l'envoi du fichier à partir du Client.exe vers le Serveur.exe en double-clickant sur leurs icônes respectives, le flux n'est pas récupéré par le serveur et le transfert ne se fait pas.
    Compte tenu de ma faible culture en informatique, il m'est impossible de comprendre ce phénoméne. J'ai toujours été convaincu que le fichier .exe en mode compilation par "F9" devait avoir le même comportement que le fichier .exe lancé en double-clickant sur son icône.
    Je reste donc bloqué et plus que perplexe, avec un futur bien sombre pour la suite de mon projet.
    Où peut bien se nicher l'erreur ?
    Merci d'avance pour vos éclairages.

  5. #5
    Expert Confirmé Sénior Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    10 050
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 10 050
    Points : 14 266
    Points
    14 266

    Par défaut

    tu indiques un nom complet de fichier : c:\dossier\sous-dossier\fichier.ext ?
    Entre F9 et double-clic, le dossier courant peut être différent, ainsi que les variables d'environnement
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Candidat au titre de Membre du Club
    Inscrit en
    avril 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 37
    Points : 13
    Points
    13

    Par défaut

    Il ne peut s'agir d'un problème de nom de fichier puisque ça fonctionne en faisant F9.
    Pour l'environnement, pourquoi pas. Mais dans ce cas, comment fait-on pour s'en affranchir?
    Ne pourrait-il pas s'agir d'un problème dr Thread? J'ai en effet le serveur et le client sur mon PC et j'essaie de transférer un fichier d'un dossier (client) vers un autre dossier (serveur), sur le Host 127.0.0.1.
    Par ailleurs, j'envoie le fichier dans un MemoryStream et je le récupère dans un FileStream car je n'ai pas trouvé, dans l'aide, la méthode MemoryStream.SaveToFile.
    Mais, comme je l'ai dit, ça fonctionne parfaitement par F9 pour le Serveur et double clic sur le Client.exe.
    Merci d'avance.

  7. #7
    Candidat au titre de Membre du Club
    Inscrit en
    avril 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 37
    Points : 13
    Points
    13

    Par défaut

    J'ai placé un mémo sur la fiche Serveur pour y afficher les résultats de chaque ligne de code.
    Je constate
    -que le nom de fichier est bien transféré,
    -que le nom de fichier destination (NomFichier) est correct avec son chemin complet
    -mais que le flux n'est pas créé par fStream:= TFileStream.Create(NomFichier,fmCreate).
    Si je fais F9 sur Dephi, ce flux est créé sans problème.
    Voilà une information complémentaire qui peut peut-être aider pour trouver une solution.

  8. #8
    Expert Confirmé Sénior Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    10 050
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 10 050
    Points : 14 266
    Points
    14 266

    Par défaut

    Peut-être l'UAC avec son VirtualStore, les fichiers ini par exemple ne sont pas forcément là ou l'on pense !
    TFileStream renvoie une exception, tente un GetLastError (si c'est pas trop tard)
    tente un CreateFile (API Windows)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Candidat au titre de Membre du Club
    Inscrit en
    avril 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 37
    Points : 13
    Points
    13

    Par défaut

    Avec CreateFile je me retrouve dans la même situation : impossible de créer le flux fichier exigé par ReadStream.
    Je vais demander à un ami de venir chez moi avec son portable.
    Nous pourrons constituer un réseau local (je suis actuellement seul sur ce réseau) et échanger par nos adresses 192.165.1.x. Nous verrons alors s'il y a un conflit entre le Client et le Serveur lorsqu'ils communiquent sur un même poste.
    Je ne vois plus d'autre solution.
    Je donnerai de mes nouvelles après cet essai.

  10. #10
    Expert Confirmé Sénior Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    10 050
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 10 050
    Points : 14 266
    Points
    14 266

    Par défaut

    Le Fichier lu par le client est différent du fichier écrit par le serveur ?

    En F9, si tu débug, tu ralentis le serveur qui, du coup, peut écrire dans un fichier qui n'est pas bloqué par un autre process (le client)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  11. #11
    Candidat au titre de Membre du Club
    Inscrit en
    avril 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 37
    Points : 13
    Points
    13

    Par défaut

    Le fichier lu par le Client et le fichier écrit par le Serveur portent le même nom mais sont dans des dossiers différents.
    J'ai déjà fait l'essai de ralentir le client par un Sleep(500) mais sans résultat.
    J'ai réssayé ce matin en mettant un Sleep(500) avant chaque Write mais sans plus de résultat.
    Avec le Client et le Serveur sur 2 PC différents, les process ne devraient pas se contrarier. Cet essai sera fait au plus tard dans 3 jours.

  12. #12
    Candidat au titre de Membre du Club
    Inscrit en
    avril 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 37
    Points : 13
    Points
    13

    Par défaut

    L'essai vient de se terminer. Sans succès. TFileStream non créé.
    Que peut-on faire??

  13. #13
    Candidat au titre de Membre du Club
    Inscrit en
    avril 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 37
    Points : 13
    Points
    13

    Par défaut

    Du nouveau. Le fichier est transféré sur une clé USB selon la séquence suivante :

    Code :
    1
    2
    3
    4
    5
    6
    7
                sFileName:= 'G:\' + sLine;           // G = clé USB
                hFile:= FileCreate(sFileName);
                FileClose(hFile);
                mStream:= TMemoryStream.Create;
                iStreamSize:= ReadInt64();
                ReadStream(mStream,iStreamSize,False);
                mStream.SaveToFile(sFileName);
    Si on remplace G par C, mStream.SaveToFile(sFileName) produit une erreur, même lorsque le flux est envoyé à partir d'un autre ordinateur sur le réseau !!!!
    Mon problème n'est donc pas complétement réglé. Mais cette information peut peut-être faire entrevoir une explication.

  14. #14
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2005
    Messages
    5 195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2005
    Messages : 5 195
    Points : 8 202
    Points
    8 202

    Par défaut

    Si le fichier est du style "c:\toto.txt' sous un windows 7 avec UAC, c'est normal que cela ne fonctionne pas car L'os n'autorise pas l'écriture de fichier direct à la racine de C
    Modérateur Delphi Combattez la brute
    Aucune réponse aux sollicitations techniques par MP

    Le guide du bon forumeur :
    __________
    [Projet en cours] Des unités pour faciliter l'utilisation d'indy : EasyIndy 1.3

  15. #15
    Candidat au titre de Membre du Club
    Inscrit en
    avril 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 37
    Points : 13
    Points
    13

    Par défaut

    Effectivement. Le problème est donc résolu.
    Derrière C:\ , se trouve pourtant le fichier C:\PDOXUSRS.NET sur mon ordinateur, tout seul il est vrai.
    S'il n'avait pas été là, j'aurais peut-être été alerté.
    Toujours ce manque de connaissances de base!!
    Merci infiniment pour le temps passé sur mon cas. Je vais pouvoir enfin continuer mon projet.

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •