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

Langage Delphi Discussion :

Classe et DLL


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 26
    Points : 12
    Points
    12
    Par défaut Classe et DLL
    salut salut, ca va ? J'ai juste une question : je voulais juste savoir s'il était possible de dériver une classe exporté d'une dll.

    Imaginons que je veuille implémenter dans une DLL une classe T_Objet mère et que je veux implémenter dans mon exécutable une classe fille T_Voiture qui est dérivé de T_Object. Est-ce possible en delphi ?

    Voila, merci.

  2. #2
    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 448
    Points
    28 448
    Par défaut
    Pour faire ça sous Delphi tu as les paquets.

    Si tu veux le faire avec une simple DLL tu vas rencontrer des tas de problèmes car ce n'est pas supporté en standard comme ça l'est en C++ par exemple.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    Salut, ok merci, je vais voir du coté des paquets. Mais donc, si j'avais voulu vrament faire ca avec une dll simple, il y avait un moyen de contourner ce problème ou vraiment aucun ?

  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 448
    Points
    28 448
    Par défaut
    hum...déjà il faut utiliser ShareMem pour que l'exe et la dll partagent le même gestionnaire mémoire, sinon c'est le plantage assuré.

    Ensuite comment peut-on envisager la chose...

    on pourrait imaginer invoquer le constructeur de l'objet de la DLL sur une instance crée par l'exe...afin d'initialiser l'objet...mais dans ce cas il faut que l'exe alloue un objet d'une taille suffisante.

    exemple
    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
     
    // côté DLL
    type
     TMonObjet = object
       FInt : integer;
       FStr : string;
     end;
     
    function ObjectSize:integer;
    begin
      Result := TMonObject.InstanceSize;
    end;
     
    procedure InitObject(Obj : TMonObjet);
    begin
      Obj.Create;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // côté exe
    type
     TMonNouvelObjet=object
       FDummy : array[0..7] of byte; // TMonObject.InstanceSize
       FDouble : double;
       constructor Create;
     end;
     
    constructor TMonNouvelObjet.Create;
    begin
      if SizeOf(FDummy)<>ObjectSize then Fail;
      InitObject(Self);
    end;
    hum...faudrait voir ce que ça donne

    mais c'est casse gueule et totalement dépendant de Delphi : la DLL ne pourrait pas être utilisée par un autre langage, voir une autre version de Delphi car si TObject change...il faut qu'il soit identique dans l'EXE et la DLL !

    Il vaut mieux passer par une Interface dans ce cas.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    Ok merci, je vais essayer un peu tout ca, je vous tiens au courant...

  6. #6
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    Salut salut,
    ok je suis en train de me torturer la tête dans tous les sens là, mais je ne vois pas comment on pourrait faire une classe mère dans un package et une fille dans l'exe. Parce que pour définir la fille dans l'exe, j'ai besoin de l'unité qui définit la mère non ? Donc, ce qui signifie que dans ce cas, le package ne sert à rien...

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 747
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 747
    Points : 13 314
    Points
    13 314
    Par défaut
    Tu dois spécifier Construire avec les paquets d'exécution dans les options de ton projet. A la compilation, la classe mère sera connue par l'intermédiaire des fichiers dcp.

    Par contre, l'effet collatéral est que tu devras fournir l'ensemble des paquets d'exécution avec ton projet et non pas seulement ta propre bpl .

    Bien sûr, une modification du paquet passera aussi par une recompilation de l'exe sous peine d'avoir des erreurs de points d'entrée de ta BPL .

  8. #8
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    Ok merci ca marche, j'étais juste étonné que mon .exe soit aussi gros pour presque rien ^^ !

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

Discussions similaires

  1. class library dll debug
    Par evarist dans le forum VB.NET
    Réponses: 1
    Dernier message: 28/05/2008, 22h01
  2. export class via dll probleme ?
    Par cheroua dans le forum C++
    Réponses: 9
    Dernier message: 25/08/2006, 12h28
  3. Classes et Dll.
    Par jamais34 dans le forum MFC
    Réponses: 3
    Dernier message: 03/03/2006, 19h43
  4. [Debutant(e)]Dossiers .java, .class et .dll
    Par jeanmm dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 12/01/2006, 14h43
  5. [DLL] Methodes de classe et dll
    Par chronos dans le forum C++
    Réponses: 11
    Dernier message: 27/04/2005, 17h18

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