Indy with Lazarus/fr

From Lazarus wiki
Revision as of 14:18, 29 April 2020 by E-ric (talk | contribs) (Problème sur Windows 64 bits)

Deutsch (de) English (en) español (es) français (fr) 日本語 (ja) 한국어 (ko)

(NdT E-ric (talk) 13:05, 29 April 2020 (CEST): Les indications chronologiques originelles étant relatives, leur validité lors de la traduction est aussi relative)

Indy pour Lazarus

Une nouvelle tenative de conversion d'Indy a été entreprise par l'équipe de base (core team) d'Indy. Marco van de Voort, développeur FPC, travaille avec le coeur d'Indy pour que FPC/Lazarus fonctionne pleinement avec Indy. En particulier, JP Mugaas d'Indy a fait pas mal de bon travail pour porter Indy10 vers FPC. La plupart du backend unixrtl est de son fait.

Actuellement, Indy10 fonctionne presque complètement et l'utilisabilité pour l'utilisateur final a été améliorée. Seuls des sujets tels que OpenSSL et la compression pourraient demander des connaissances supplémetaires. Le suport 64-bit n'est pas entièrement validé.

(Avis d'un contributeur) Conseil: Je ne suis pas très intéressé(e) par le support de la partie Kylix d'Indy. (Tout ce qui utilise l'unité libc). Je l'ai portée uniquement comme une étape vers une RTL native d'Unix utilisant les apps Indy.

Exigences

Actuellement, FPC 2.0.4 (NdT: aucun vérification faite pour les versions 3.x) est vraiment près d'être capable d'utiliser Indy dans tous ses aspects, excepté pour le bug de serveur sur FreeBSD/Mac OS X (qui nécessite 2.1.1)

Puisque Indy10 fonctionne maintenant sur toutes les cibles majeures, nous nous concentrons sur cette version. Alors que la conversion vers Indy9 semble plus simple, il faut garder à l'esprit qu'elle ne tourne que sous Win32 (et pourrait être théoriquement portée sur Linux/x86).

Ainsi nous recommendons aux gens de travailler avec Indy10 autant que possible.

(Pour Indy9, vous pourriez avoir besoin de retirer la surcharge de la méthode tmemorystream.setsize (Marcov: ???) pour que les composants Telnet fonctionnent, mais Indy9 n'a pas été testé depuis longtemps)

Le portage is honnêtement stable, et JP Mugaas a fait beaucoup pour améliorer la qualité de la version, un ensemble de makefiles compris.

Téléchargements / Liens

Instantanés (snapshots) actuels sont là:

Ce qui marche, ce qui ne marche pas

Indy9:

  • Devrait fonctionner largement sur Windows. Beaucoup de démos sont portées.
  • Pas ou peu sur Linux. Aucun espoir sur les cibles non Linuxw/x86 (non Kylix).

Indy10:

  • Windows et Unix: Les clients fonctionnent et les serveurs devraient bien marcher en principe.
  • Le principal travail pour la RTL Unix native est fait. Les serveurs et clients semblent fonctionner avec FreeBSD et OS X.

Tous: les versions sécurisées ne sont pas encore testées.

Plans à court terme

  • Convertir les démos pour démontrer/tester le fonctionnement.
  • Fixations des bugs à réinjecter dans le RCS FPC ou Indy.

Problèmes

  • Indy9 et Indy10 s'excluent mutuellement, ce qui provoque des problèmes de déploiement, même la valeur par défaut est un problème
    • Indy9 est plus utilisé et éprouvé dans l'industrie.
    • Indy10 est plus portable et à meilleur long terme. Cependant, l'assimilation semble faible et il n'y a plus beaucoup de mouvement à Indy non plus.
  • Comment déployer ? Parties revenant à Lazarus et celle revenant à FPC.
  • Beaucoup de paquets et de démos ont des chemins d'accès dedans. Comment les fixer centralement de façon à ce qu'un utilisateur "profane" puisse les construire.
  • Problèmes liés à Lazarus:
    • Problèmes de transaprence des icônes.
    • La palette de composants ne défile pas, si vous posez beaucoup de composants dans un onglet, ils ne sont pas sélectionnables. Contournement implémenté JP Mugaas les a séparés en clients Indy A-M et N-Z etc. De plus, pendant ce temps, Lazarus est passé à deux rangées de composants par onglet.
  • Les démos Indy (et particulièrement celles d'Indy10) ne sont pas adaptées pour un usage multi-plateforme. Leur installation est terriblement liée à Windows, avec des espaces dans les chemins d'accès, des répertoires profondément imbriqués (deep nested dirs) et des charges inutiles (C# code). Un petit ensemble de démonstrations devra être créé.

Bugs

  • Les serveurs Indy10 ne fonctionnaient pas avant du fait d'une exception survenant durant le démarrage, ce qui arrêtait tout. Vous devez avoir FPC 2.2(.0) ou postérieur pour corriger ceci (problème pthread_kill). Cela affecte sans doute aussi Mac OS X.
  • Pendant la conversion de la démo, la propriété de liaison est souvent mal convertie. Cela peut amener à des erreurs étranges, spécialement parce Indy semble lier le même port utilisant ensemble IPV4 et IPV6 en même temps.

Ubuntu 10.04 + Lazarus 0.9.28 + Indy 10(Server Component) -> lancé, ne fait rien à part se planter.

Solution (bruce0829@yahoo.com.tw collecter et organiser les données):

(1).Menu principal de Lazarus -> Projet -> Options du projet -> Options du compilateur -> Options personnalisées, ajouter le paramètre "-dUseCThreads".
(2).Forcer le IdTCPServer à travailler en mode Id_IPV4.

procedure TForm1.FormActivate(Sender: TObject);
var
  Binding: TIdSocketHandle;
begin 
  //uses idGlobal
  //explicitly adding a Binding object prevents TIdTCPServer
  //from creating its own default IPv4 and IPv6 Binding objects
  //on the same listening IP/Port pair...
  Binding := IdTCPServer1.Bindings.Add;
  Binding.IPVersion := Id_IPv4; //optional: forces the Binding to work in Id_IPV4 mode.
  Binding.IP := '127.0.0.1';
  Binding.Port := 6501; //customization 
  IdTCPServer1.Active := True;  
end;

(3)Utilise TIdSync pour contrôler votre interface utilisateur dans l'événement IdTCPServer's OnExecute().

Comment installer

Matthijs: Ce n'est donc pas encore parfait, mais vous voulez l'essayer. Voici comment l'installer dans Lazarus.

  • Ouvrir et compiler indysystemlaz.lpk
  • Ouvrir et compiler indycorelaz.lpk
  • Ouvrir et compiler indyprotocolslaz.lpk
  • Ouvrir et compiler et installer dclindycorelaz.lpk
  • Ouvrir et compiler et installer dclindyprotocolslaz.lpk

Enuite reconstruire Lazarus et vous verrez une palette de 15 onglets (Ndt: traduction non sûre) avec les composants Indy.

Comment installer sur Debian/Ubuntu

  • # cd indy-10.2.0.1/fpc
  • # chmod +x debian/rules
  • # touch README
  • # sudo apt-get install fakeroot
  • # dpkg-buildpackage -rfakeroot -uc
  • # cd ..
  • # sudo dpkg -i *.deb
  • installer le paquet indylaz.lpk dans lazarus

Comment installer [2]

If you couldn't install Indy for Lazarus with tips above, you can try this...

From Yahoo! Brazil, Lazarus Group (User Everaldo)

Version installed on Lazarus 0.9.24 using component indy-10.2.0.1.

  • Unzip the component from file tar.gz (must be this file, the "zip file" does not work) in directory $(LazarusDir)\components;
  • Go to directory $(LazarusDir)\components\indy-10.2.0.1\ and to create inside them a directory named "saved";
  • Copy the content of the directory $(LazarusDir)\components\indy-10.2.0.1\lazarus\ to directory "saved" created above;
  • Copy the content of directory $(LazarusDir)\components\indy-10.2.0.1\fpc\ to directory $(LazarusDir)\components\indy-10.2.0.1\lazarus, and rewrite all files, ok;
  • Get the content of directory "saved" and copy inside of $(LazarusDir)\components\indy-10.2.0.1\lazarus and you can delete "saved" directory now;
  • Install the package laz.lpk (available in $(LazarusDir)\components\indy-10.2.0.1\lazarus\indy) of conventional way.

On LINUX the path is: /usr/lib/lazarus/components/indy-10.2.0.1/

Comment installer [3] Windows et Debian Linux, Indy 10.5.8.0 et versions postérieures

  • Need working Lazarus (and FPC) for this
  • Download from http://www.indyproject.org/Sockets/Download/DevSnapshot.EN.aspx. Or from the alternate web site for the updated and current versions: http://indy.fulgan.com/
  • unpack into a directory
  • copy the *.pas, *.lrs and *.inc of the \Lib\System, \Lib\Core, and \Lib\Protocols subdirectories into a new directory of your choosing
  • copy the indylaz.lpk in the \Lib directory to the directory you created above
  • from within Lazarus do a Package -> Open package file, open the indylaz.lpk
  • in the Package Options dialog, add the path to the directory you created above to the "Unit" field.
  • compile then install (will rebuild Lazarus). EDIT: Currently, due to a know bug in FPC, you must compile the Indy package TWICE before installing it.

In order to write & compile Indy10 applications, you need to put the path to the Indy directory in the "Other Unit files" textbox of every project that you write. You'll find "Other Unit files" under Project Options -> Compiler Options -> Paths.

Comment installer (confirmé) sur Windows - Indy 10.2.03

/* How to install [3] Windows, Indy 10.5.8.0 and above */ For a lot of users, I'm sure that the information given above won't work, or will be somewhat confusing given the differences between versions and inconsistent explanations.

The website points you to download the latest version from the snapshots page.
This wiki tells you to copy a lot of files over into directories.
For me, neither worked, and ended up making a mess of my Lazarus installations.
  1. Firstly, the page I would retrieve this from is here. Other sites I tried had problems with some files inside the archive.
  2. When you open up the archive above, you will see there are folders: "fpc" and "lazarus".
    1. You can copy the contents of "fpc" into: LAZARUS_DIR\fpc\2.6.0\source\packages\indylaz if you want to have things neat and tidy.
    2. The "lazarus" folder, you copy into LAZARUS_DIR\components\indylaz
    3. With both of these, make sure that there isn't a sub-directory inside the folders given. i.e. LAZARUS_DIR\components\indylaz\lazarus\
  3. Go into Lazarus and go to "Package" -> "Open package file" and point it to the "indylaz.lpk" inside the LAZARUS_DIR\components\indylaz directory.
  4. Once the package loads inside your project, click on the "options" button, which resembles an image of a parcel with a cog next to it.
  5. Click the "Compiler Options" on the left-hand side and Click on the ".." button next to "Other unit files (-Fu) (delimiter is semicolon)".

Select the "fpc" then "lazarus" folders you created above and click OK. Lazarus will sort out the relative path for you. Don't change it.

  1. Click OK and compile and then direct angry bile towards the individual who has steered you wrong with the previous, unhelpful, instructions.

Problème sur Windows 64 bits

Sur Windows 64-bit, la compilation de l'archive mentionnée au-dessus ne fonctionnera pas. Ceci peut être corrigé en éditant IdAntiFreeze, remplaçant :

 type
   TIdAntiFreeze = class(TIdAntiFreezeBase)
   public
     procedure Process; override;
   end;

par:

 type
   TIdAntiFreeze = class(TIdAntiFreezeBase)
   public
     {$IFDEF WIN32}
     procedure Process; override;
     {$ENDIF}
   end;

Problème de fuite de mémoire

Si vous avez des fuites de mémoire dans votre application Indy, c'est parce que vous utilisez les unités IdStack ou IdThread, ou des composants dépendant d'eux. C'est voulu dans la conception, dans Delphi cela est résolu en enregistrant de telles fuites avec le gestionnaire de mémoire. De telles fonctionnalités ne sont pas encore disponibles dans Free Pascal, mais heureusement vous pouvez la corriger de manière assez simple. Dans le fichier IdCompilerDefines.inc, vous devriez remplacer cette ligne :

 {.$DEFINE FREE_ON_FINAL}

par celle-ci:

 {$DEFINE FREE_ON_FINAL}

et recompiler Lazarus et Indy. Les fuites sont parties mais vous devriez lire ces avertissements liés au define dans les unités IdStack.pas et IdThread.pas pour éviter des potentielles fautes de protection générale. Voici le fil de discussion de forum où la correction était mentionnée par l'un des développeurs Indy.

Liens externes