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 compilée avec C++ Builder exporte des fonctions non-voulues


Sujet :

C++Builder

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4
    Par défaut DLL compilée avec C++ Builder exporte des fonctions non-voulues
    Bonjour à tous,

    Je suis en train de développer une DLL avec C++ Builder 6. Cette DLL utilise des fonctions et procédures déjà développées, mais en pascal, sous Delphi 6.
    Afin d'accéder à ces fonctions dans mon projet C++ builder, je fait "Ajouter au projet", je sélectionne l'unité .pas qui m'intéresse, et j'inclu le fichier .hpp associé dans mon .cpp. Cela fonctionne très bien et j'étais satisfait du résultat, jusqu'à ce que je réalise que ma DLL exportait, en plus de la douzaine de fonctions souhaitées, toutes les fonctions de tous les .pas ajoutés au projet.

    En tentant de simplifier au maximum le problème pour isoler mon erreur, je me suis rendu compte qu'il était très facilement reproductible :

    - Dans Delphi 6, créér une unité 'TestUnit.pas', et implémenter une fonction 'myFunction'. Sauvegarder.

    - Dans C++ Builder 6, crééer une nouvelle DLL 'TestDll', Ajouter TestUnit.pas au projet, et compiler.

    TestDll exporte myFunction alors que je ne lui ai rien demandé (enfin, pas volontairement en tout cas). Pire, si TestUnit.pas utilise d'autres .pas, leurs fonctions seront également exportées par la DLL. Ma DLL exporte ainsi près de 4000 fonctions, ce qui ne fait pas très sérieux...

    Voila, je voulais connaitre la cause de ces exports, et savoir comment les éviter.

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    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 081
    Par défaut
    Je fais aussi des DLL, j'ai constaté que les méthodes de mes TObject étaient exportées reconnaissables à leur @
    Même les méthodes privées !
    J'ai ce phénomène sur des classes C++ basé sur du TObject !
    Perso, ça ne dépasse pas les 400 !
    J'ai surement moins d'include !

    Est-ce 4000 fonctions écrites par toi ?
    Il peut y avoir des fonctions de la VCL\RTL aussi comme TJPEGImage

    Je fais pas mal de DLL en C++Builder 2007, avec les BPL d'execution et la RTL dynamique, qui implique des déployer ces fichiers supplémentaires, peut-être que pour fonctionner, Borland a besoin des ses entrées ?

    Faudrait voir si il y a une différence entre avec ou sans paquet d'execution !
    D'ailleurs même les EXE contiennent une table d'export, mais je n'ai pas les méthodes de classes ce coup ci !

    C'est vrai, ce n'est pas terrible, il doit y avoir une option ? je l'espère !
    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

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4
    Par défaut
    Salut et merci pour ta réponse.

    Et bien j'essayé d'inclure une unité écrite par moi, qui en inclue plusieurs autres (écrites par moi ou non), et au final je me retrouve avec 4000 fonctions dont une majorité étant effectivement issues de la VCL (Controls, Dialogs, Forms, etc...) C'est que l'unité qui m'intéresse est extraite d'un très gros projet, même si je n'ai besoin que de quelques fonctions. Mais malheureusement, ces quelques fonctions ont elle même besoin d'autres fonctions du gros projet, etc...

    Compiler avec/sans les package et la RTL semble ne rien changer.

    Je suppose que, vu l'age de C++ builder 6, il n'y a pas de support ou de forum d'aide officiel ?

    PS : c'est vrai que les exe compilés avec C++ builder exportent des choses (et même des méthodes...). Je n'avais jamais remarqué...

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4
    Par défaut
    Personne n'a d'idée concernant ce problème ? Il n'y a pas moyen d'empêcher C++ Builder d'exporter ces fonctions ? Ou au moins, quelqu'un aurait-il un lien vers un forum d'aide officiel (s'il existe) ?
    Merci d'avance

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    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 081
    Par défaut
    Embarcadero - Doc Wiki - RAD Studio XE2 - Création de packages et de DLLs

    les classes héritant de TObject sont déclarés comme DELPHICLASS pour les RTTI, le constructeur façon VCL et cela implique aussi Package

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define DELPHICLASS          __declspec(delphiclass, package)   // Implemented in Delphi (C++ does not generate RTTI)
    le mot clé package provoque l'export des méthodes comme si la DLL était un BPL
    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

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4
    Par défaut
    D'accord, apparemment il n'y a pas grand chose à faire mais au moins je comprend mieux pourquoi ces fonctions se retrouvent exportées. Effectivement, si je regarde le fichier .hpp généré automatiquement par C++ Builder, il y a des delphiclass et des package partout...

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/08/2011, 18h23
  2. Réponses: 3
    Dernier message: 24/02/2008, 20h01
  3. Réponses: 12
    Dernier message: 01/03/2007, 11h28
  4. Réponses: 10
    Dernier message: 02/11/2005, 11h12
  5. Export des fonctions stockées
    Par bob_doulz dans le forum Oracle
    Réponses: 5
    Dernier message: 20/07/2004, 11h18

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