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

 Delphi Discussion :

Structure de dll compatible avec plusieurs langages


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de declencher
    Inscrit en
    Mai 2003
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 441
    Par défaut Structure de dll compatible avec plusieurs langages
    Bonjour,

    Je développe une application depuis plusieurs années maintenant, et j'avais isolé certaines fonctions dans des dll. Ces librairies sont maintenant passées en open source, et ce sont les retours des développeurs qui me poussent à réfléchir à la question suivante :

    Est il possible de créer une structure de dll compatible delphi/C++/VB, et si oui comment faire ?

    Je savais depuis longtemps que le type string posait problème, et je vais revoir ça. Mais que faire de mes types de données integer, boolean, word, double, byte et surtout mes record ?

    Vous l'aurez compris, mon appli est écrite en delphi, mes premières dll aussi, et des développeurs ne connaissant pas delphi avaient également envie de développer de nouvelles dll et de les partager avec les utilisateurs...

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par declencher Voir le message
    Bonjour,

    Je développe une application depuis plusieurs années maintenant, et j'avais isolé certaines fonctions dans des dll. Ces librairies sont maintenant passées en open source, et ce sont les retours des développeurs qui me poussent à réfléchir à la question suivante :

    Est il possible de créer une structure de dll compatible delphi/C++/VB, et si oui comment faire ?

    Je savais depuis longtemps que le type string posait problème, et je vais revoir ça. Mais que faire de mes types de données integer, boolean, word, double, byte et surtout mes record ?

    Vous l'aurez compris, mon appli est écrite en delphi, mes premières dll aussi, et des développeurs ne connaissant pas delphi avaient également envie de développer de nouvelles dll et de les partager avec les utilisateurs...
    si tu utilises des string avec ShareMem, c'est la première chose à changer.

    pour ce qui est des Byte, Word, Integer, Double ils existent en C++/VB

    Boolean n'existe pas en tant que tel, mais en fait c'est un Byte = 0 ou 1

    les record existent également, tant qu'ils contiennent des types connus ce n'est pas un problème.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 115
    Par défaut
    Le mieux, c'est de faire comme les API Windows et donc d'utiliser les types Windows au lieu des types Delphi, tu pourras plus facilement communiquer avec les autres développeurs si déjà vous êtes d'accord sur les types !

    Pour les record, attention à l'alignement sur les registres (voir packed et directive associée)

    je suppose que ce sont des DLL utilisées via le mot clé external ou via le couple LoadLibrary\GetProcAddress, on va dire DLL stdcall

    Tu peux encaspuler tes DLL stdcall par des DLL COM
    Cela présente l'avantage d'uniformiser les types (puisque limiter au type autorisé par Automation), cela permet de faciliter l'utilisation, cela inclu une bibliothèque de type qu'il facile à intégrer avec C++Borland ou Visual Studio !

    En plus, cela facilite l'utilisation en C# ou VB.Net si tu respecte la convention safecall !
    Car un Objet COM proprement écrit peut être utilisé comme une Assembly (ben oui, faut pas trop leur compliquer la vie aux habitués du Garbage Collector)

    Car en C++, certains vont réclamer des fichiers .lib (parce qu'il ne savent pas les générer eux même depuis la DLL) et les headers (parce qu'ils n'ont pas envie de traduire tes éventuelles headers en delphi)

    On a l'impression que tu souhaites ouvrir ton application à l'ajout de Plug-In extérieur ?
    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
    Membre Expert Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Par défaut
    Attention aussi aux enums qui sont stockés sur 1, 2, 3, ou 4 octets selon le nombre l'elements qu'ils contiennent.
    J'avais deja eu un probleme avec ca pour utiliser une fonction de windows dont je n'avais pas l'entete en delphi, et j'ai du rajouter une directive de compilation, {$Z4} il me semble, pour que les enums soient sur 4 octets

  5. #5
    Membre éclairé Avatar de declencher
    Inscrit en
    Mai 2003
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 441
    Par défaut
    Je ne m'attendais pas à des réponses aussi intéressante ! Malheureusement vous m'avez perdu...

    Auriez vous des tuto qui présente la compatibilité entre les formats de données ? C'est quoi cette histoire de "packed" ? Il y a une liste de directives prédéfinies à utiliser pour améliorer la compatibilité entre les langages ?

    Cette histoire de dll COM m'intéresse beaucoup, je ne pensais pas que le compatibilité pouvait aller aussi loin. Je vais tenter des recherches. Des lectures à me conseiller ?

    Si j'ai bien compris je dois virer les string, remplacer les boolean par des Byte pour éviter toute incompréhension avec les développeurs, et je vais lire le lien sur le "safecall".

    Merci pour ces premières infos !

    Je confirme, j'ouvre mon soft à des plugins. Pour la petite histoire, je bosse dessus lorsque j'ai le temps, depuis plusieurs années. J'avais utilisé des plugins développé en delphi. Le but des premiers plugin est de rendre le soft compatible avec plusieurs hardware car selon les fabricants le protocole change. Ayant moins de temps qu'avant, je ne pouvais plus bosser sur des protocole que je ne pouvais pas tester moi même. j'ai partagé tous les plugins existant en les mettant en open source, mais il y a des gens doués qui développe dans d'autres langage, et en plus ils rendraient service à de nombreux utilisateurs.

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par declencher Voir le message
    Je ne m'attendais pas à des réponses aussi intéressante ! Malheureusement vous m'avez perdu...

    Auriez vous des tuto qui présente la compatibilité entre les formats de données ? C'est quoi cette histoire de "packed" ? Il y a une liste de directives prédéfinies à utiliser pour améliorer la compatibilité entre les langages ?

    Cette histoire de dll COM m'intéresse beaucoup, je ne pensais pas que le compatibilité pouvait aller aussi loin. Je vais tenter des recherches. Des lectures à me conseiller ?

    Si j'ai bien compris je dois virer les string, remplacer les boolean par des Byte pour éviter toute incompréhension avec les développeurs, et je vais lire le lien sur le "safecall".

    Merci pour ces premières infos !

    Je confirme, j'ouvre mon soft à des plugins. Pour la petite histoire, je bosse dessus lorsque j'ai le temps, depuis plusieurs années. J'avais utilisé des plugins développé en delphi. Le but des premiers plugin est de rendre le soft compatible avec plusieurs hardware car selon les fabricants le protocole change. Ayant moins de temps qu'avant, je ne pouvais plus bosser sur des protocole que je ne pouvais pas tester moi même. j'ai partagé tous les plugins existant en les mettant en open source, mais il y a des gens doués qui développe dans d'autres langage, et en plus ils rendraient service à de nombreux utilisateurs.
    tu proposes donc aux gens de développeur leurs propres DLL Plugin ? je ne savais pas que VB permettait de faire des DLL.

    Tu peux déjà lire en ligne le chapitre sur les DLL du livre Delphi 7 Studio.

    Pour COM c'est une idée, mais ça oblige aux développeurs de connaitre COM...alors qu'une API de base sera plus simple à mettre en oeuvre...après tout dépend de la complexité de cette API.

    Ensuite je te recommande de documenter ton API par des termes génériques, ou en définissant clairement ceux du Pascal, les programmeurs des autres langages s'y retrouveront.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Byte : 8 bits non signé
    Word: 16 bits non signé
    Integer : 32 bits signé
    Cardinal : 32 bits non signé
    etc...
    Record : définition de structure
    packed indique simplement qu'il n'y a pas d'alignement des champs d'un record (alignement qui affecte les temps d'accès aux données).

    exemple, compare les SizeOf() de ces records
    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
     
    type
      TRecord1 = record
         b : Byte;
         i : Integer;
      end;
     
      TRecord2 = packed record
        b : Byte;
        i : Integer;
      end;
     
      TRecord3 = packed record
        b : Byte;
        pad : array[1..3] of Byte;
        i : Integer;
      end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Membre émérite
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Par défaut
    Integer en vb6 est sur 16 bit signé son équivalent c'est le long utilisé aussi comme pointer pour faire des routines Pchar

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

Discussions similaires

  1. Réflexion sur la structure d'une requête avec plusieurs colonnes
    Par GarsDuCalvados dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/02/2013, 12h11
  2. Réponses: 4
    Dernier message: 21/12/2009, 17h16
  3. [TopBar] compatible avec plusieurs resolutions
    Par sletis dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 19/03/2009, 18h32
  4. Que pensez vous du fait de programmer avec plusieurs langages en meme temps
    Par darkman1811 dans le forum Langages de programmation
    Réponses: 18
    Dernier message: 30/06/2008, 15h24
  5. Créer un jeu avec plusieurs langages
    Par spidouille dans le forum Pascal
    Réponses: 6
    Dernier message: 04/10/2005, 14h07

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