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

C++Builder Discussion :

DLL et TForm


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 83
    Par défaut DLL et TForm
    Bonjour,

    j'ai parcouru toute la recherche mais malheureusement je n'ai pas trouvé de réponse à ma question.

    J'utilise Borland c++ 2007 .

    J'ai deux projets.

    1°) Projet DLL :
    J'ai fais fichier-nouveau- DLL
    Il m'a créé un fichier .cpp . J'ai fais Fichier-Nouveau-Fiche . Un deuxième CPP s'est ouvert où j'ai placé un Bouton dessus. J'ai créé un événement Onclick sur le bouton .

    Dans le Header du deuxième CPP j'ai placé tout en haut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #ifdef __DLL__
    #define IMPORT_EXPORT __declspec(dllexport)
    #else
    #define IMPORT_EXPORT __declspec(dllimport)
    #endif
    Et j'ai remplacé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Class TFXXXX : public TForm
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IMPORT_EXPORT class TFXXXX
    En résumé :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    #ifdef __DLL__
    #define IMPORT_EXPORT __declspec(dllexport)
    #else
    #define IMPORT_EXPORT __declspec(dllimport)
    #endif
     
     
    #ifndef ps_classH
    #define ps_classH
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
     
    IMPORT_EXPORT class TFXXXX : public TForm
    {
    __published:	// Composants gérés par l'EDI
    	TButton *Button1;
    	void __fastcall Button1Click(TObject *Sender);
    private:	// Déclarations utilisateur
    public:		// Déclarations utilisateur
    	__fastcall TFXXXX (TComponent* Owner);
    };
    #endif
    Malheureusement Je n'ai pas pu remplacer les __fastcall par du __stdcall

    J'ai compilé, il m'a généré deux fichiers : Lib et DLL

    2°) Projet EXE
    J'ai créé un simple projet EXE. QUi fonctionne et qui n'affiche qu'une FORM vide.
    J'ai ajouté le fichier lib dans le projet
    J'ai copié le fichier DLL dans le même répertoire que l'EXE
    J'ai inclus le fichier .H du DLL pour que les class soient reconnues

    Ensuite dans le CPP du projet j'ai créé un événement onclick d'un bouton placé par après qui contient le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            TFXXXX*FXXXX;
    	FXXXX= new TFXXXX(this);
    Je compile

    Hélàs : erreur :
    LINK32 Erreur : 'TFXXXX::' externe non résolu, référencé depuis .....obj


    Je suis à court d'idée. Je ne vois pas d'autre solution que de vous demander.

    Je vous remercie d'avance

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Par défaut
    Je ne sais pas s'il est possible d'intégrer directement une classe dans une DLL. C'est possible dans un package, mais je ne crois pas dans une DLL.

    La DLL expose des fonctions ou des variables.

    Moi je fais comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // Shortcut for exportation
    #define DLLCall  extern "C"
    #define DLLExport  __stdcall __declspec(dllexport,dllimport)
     
    //! Get the version number of the library
    DLLCall DLLExport int Version();

    Tu devrais pouvoir faire une fonction qui te retourne ton formulaire dans le genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DLLCall DLLExport TFXXXX* CreateXXXXForm(TObject* Owner) {
     
      return new TFXXXX(Owner);
     
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 83
    Par défaut
    J'ai déjà fais avec des classes simples où il n'y a pas de Form à afficher. Cela n'a pas posé de problème

    C'est quand j'utilise les classes des Forms que ça ne marche pas. à mon avis c'est dû à __fastcall qui ne peut être remplacé par du __stdcall .

    je vais voir avec ta méthode.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 83
    Par défaut
    J'ai réussi ! Youppie... Merci !

    En partant de ton idée, j'ai fais une recherche,

    j'ai vu mon erreur :

    c'est bête mais bon :

    ça doit être comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class IMPORT_EXPORT  TFXXXX
    et non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IMPORT_EXPORT  class  TFXXXX

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

Discussions similaires

  1. TForm dans une DLL
    Par dgeodp dans le forum Langage
    Réponses: 4
    Dernier message: 19/03/2008, 19h12
  2. Réponses: 22
    Dernier message: 11/06/2007, 23h24
  3. dll dynamique et TForm en ShowModal
    Par declencher dans le forum Delphi
    Réponses: 16
    Dernier message: 16/04/2007, 15h41
  4. TForm dans une dll appelée dynamiquement
    Par declencher dans le forum Delphi
    Réponses: 2
    Dernier message: 22/12/2006, 11h21
  5. TForm dans une DLL avec utilisation d'Interface
    Par guedelmalin dans le forum Langage
    Réponses: 13
    Dernier message: 17/06/2005, 11h58

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