IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Abandon de "AllocateHWnd/DeallocateHWnd" pour application multi-plateforme


Sujet :

Lazarus Pascal

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Abandon de "AllocateHWnd/DeallocateHWnd" pour application multi-plateforme
    Bonjour,

    Après avoir migré mon application de Delphi vers Lazarus, je dois la rendre multi-plateforme. (Win32/Linux).

    Mais voilà, j'utilise "AllocateHWnd/DeallocateHWnd" pour recevoir des événements Windows liés à mes sockets TCP, et je n'arrive pas à trouver l'équivalent qui fonctionnerait en multi-plateforme. Existe-t-il une solution ?

    Sinon, même si je dois faire du conditionnel (Win32/Linux) connaîtriez-vous l'équivalent à "AllocateHWnd/DeallocateHWnd" dans l'OS Linux !
    Etant débutant Linux, je ne sais pas quoi chercher.

    Merci d'avance pour votre aide.
    Cordialement.

  2. #2
    Membre averti
    Profil pro
    au repos
    Inscrit en
    Février 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2013
    Messages : 156
    Points : 331
    Points
    331
    Par défaut
    hello,
    tu dis :
    pour recevoir des événements Windows liés à mes sockets TCP
    Quel genre d'événements ? Réception de données ? Connexions ?

    Qu'utilises-tu pour tes sockets ? Lnet ? Sockets ? Indy ? Synapse ? autre ?

    Peux-tu nous dire ce que doit faire globalement ton programme ? il y a peut-être une autre voie ?

    Amicalement, nullosse

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Bonjour,
    et merci pour l'intérêt que vous portez à ma problématique.

    Quel genre d'événements ? Réception de données ? Connexions ?
    Les événements qui sont traités servent à ouvrir/fermer les sockets, ainsi que recevoir/émettre les données.

    Qu'utilises-tu pour tes sockets ? Lnet ? Sockets ? Indy ? Synapse ? autre ?
    Le programme écrit en Delphi, utilise la unit "WinSock", et je pense migré vers "Sockets" pour la compatibilité (Win32/Linux).

    Peux-tu nous dire ce que doit faire globalement ton programme ? il y a peut-être une autre voie ?
    Mon programme est un Web serveur, qui utilise les protocoles HTTP et FTP maison, et la cible final n'est pas un PC. Mais là c'est une autre histoire.
    Ma première étape est d'obtenir un fonctionnement quasi identique aussi bien en Win32 que sous Linux.
    La fonction "AllocateHWnd" associée à la procédure jointe, amène une notion événementielle des actions liées aux sockets. Je recherche la même chose mais compatible avec les 2 plateformes (Win32/Linux)

    Cordialement

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    si tu veux utiliser WSAsyncSelect, cette fonction n'existe pas sous Linux.

    tu dois passer soit par des sockets bloquants dans un Thread, soit utiliser des sockets non bliquants et adapter ton code pour tester périodiquement les sockets avec la fonction select()
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Bonjour Paul,

    comme je recherche une compatibilité des 2 plateformes, la fonction "WSAsyncSelect" doit être écartée.
    Au vu de ce que vous écrivez et tout ce que j'ai pu lire, comme il me faut une gestion ne gardant pas la main en attente d'une réception, j'ai 2 possibilités:
    - Faire des Threads... pas toujours évident pour le traitement entre Thread.
    - Appeler périodiquement le fonction select()

    d'où ma question: est-ce que la fonction select() existe dans les 2 mondes (Win32/Linux) ?

  6. #6
    Membre averti
    Profil pro
    au repos
    Inscrit en
    Février 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2013
    Messages : 156
    Points : 331
    Points
    331
    Par défaut
    tu devrais regarder du côté de Lnet qui travaille par événements :
    lNet or Lightweight Networking Library is a collection of classes and components to enable event-driven TCP or UDP networking.
    lNet should run on most platforms supported by Free Pascal compiler which implement a semi-standard BSD TCP/IP stack. Currently tested platforms and architectures are: Windows (98+, requires winsock2), Linux - x86, FreeBSD, MacOSX - PPC. Both 32 and 64 bit. WinCE is also supported although experimental.
    Images attachées Images attachées  

  7. #7
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par Tyrrell Voir le message
    Bonjour Paul,

    comme je recherche une compatibilité des 2 plateformes, la fonction "WSAsyncSelect" doit être écartée.
    Au vu de ce que vous écrivez et tout ce que j'ai pu lire, comme il me faut une gestion ne gardant pas la main en attente d'une réception, j'ai 2 possibilités:
    - Faire des Threads... pas toujours évident pour le traitement entre Thread.
    - Appeler périodiquement le fonction select()

    d'où ma question: est-ce que la fonction select() existe dans les 2 mondes (Win32/Linux) ?
    oui, bien que l'implémentation ne soit pas exactement la même (le nombre maxi de socket observés n'est pas le même)

    en fait sous Windows les fonction WSA* sont spécifiques, les autres sont standards.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Peut-être -et même certainement- sans rapport parce que je ne sais pas à quelles occasions exactement sont utilisés vos AllocateHWnd/DeallocateHWnd.

    Il existe dans l'unit LCLIntf des procedures LCLIntf AllocateHWnd (http://lazarus-ccr.sourceforge.net/d...ocatehwnd.html) et LCLIntf.DeallocateHWnd (http://lazarus-ccr.sourceforge.net/d...ocatehwnd.html).

    Utilisation de LCLIntf [Contains winapi like functions for Delphi compatibility] (uses System, Unix,...) : http://lazarus-ccr.sourceforge.net/docs/lcl/lclintf/

    Peut-être la solution est-elle de réécrire votre code en intégrant directement l'objectif d'une utilisation multi-OS plutôt que de partir d'un code Delphi. Je trouve cette méthode vraiment redoutable : partir d'un code Delphi VCL pour le porter sur un autre OS. Dès qu'il utilise winapi, méfiance de rigueur sinon potentielles désillusions au bout du projet !

    Si une réécriture est envisagée, vérifiez bien que la plateforme cible est supportée. Pour du 64 bits en Windows, un Win32 suffira mais pour Linux non. Si vous développez en Linux 64, il faut vérifier que le composant est effectivement compatible... et si vous voulez du Win 64 tout pareil : une bonne part des composants Lazarus -et la plupart de ceux portés de Delphi- n'ont pas le même stade de développement et de fonctionnalités suivant l'OS cible et la plateforme cible.

    Cordialement. Gilles
    Dernière modification par Invité ; 07/12/2013 à 16h58.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    et merci pour toutes ces précieuses informations.
    Effectivement, je suis partie dans une réécriture de ces "units" afin d'abord de mieux les comprendre et surtout de les rendre multiplateforme dès la mise en œuvre.

    Cordialement

Discussions similaires

  1. Conseil pour application multi-fenetres
    Par rtg57 dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 19/05/2010, 18h29
  2. Faire une application multi plateformes
    Par anoir19 dans le forum JDBC
    Réponses: 28
    Dernier message: 29/12/2009, 20h58
  3. Quelle api de fenêtrage pour du multi-plateforme ?
    Par Mindiell dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 29/01/2007, 17h42
  4. Quel langage pour application multi-plateforme ?
    Par yukimura_s33 dans le forum Langages de programmation
    Réponses: 22
    Dernier message: 21/11/2005, 13h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo