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 :

[DLL] Problème d'export de fonctions d'autres unités


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 9
    Points : 6
    Points
    6
    Par défaut [DLL] Problème d'export de fonctions d'autres unités
    Bonjour,

    J'essaie actuellement de faire une DLL pour mettre en commun le code de diverses applications. Mais voilà que je rencontre un problème. M'est avis que cela est du au fait que je ne comprend pas bien comment se fait le linkage mais bon, voici.

    Voici le code de ma DLL qui marche

    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
     
    library malib;
     
    uses
      FastShareMem in 'FastShareMem.pas',
      SysUtils,
      Classes;
     
    {$R *.res}
     
    const
      DLL_VERSION = '0.1';
     
    function getVersion: string; stdcall;
    begin
      Result:= DLL_VERSION;
    end;
     
    exports
      getVersion;
     
    begin
    end.
    Aucun problème, dans un programme je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    function getVersion: string; stdcall; external 'malib.dll';
    et quand j'appelle getVersion tout marche comme je l'attendais, ie, je récupère le numéro de version.

    Passons au problème, comme j'ai d'autres fonctions et que je déteste tout mettre dans un seul fichier, je décide de mettre ma fonction dans une autre unité.

    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
     
    unit libfunctions;
     
    interface
    uses
      SysUtils;
     
    function getVersion: string; stdcall;
     
    implementation
     
    function getVersion: string; stdcall; export;
    begin
      Result:= DLL_VERSION;
    end;
     
    end.
    si maintenant mon fichier principal prend cette forme :

    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
     
    library malib;
     
    uses
      FastShareMem in 'FastShareMem.pas',
      SysUtils,
      Classes,
      libfunctions in 'libfunction.pas';
     
    {$R *.res}
     
    exports
      getVersion;
     
    begin
    end.
    Et bien dans le programme final lorsque que j'appelle getVersion, le programme se bloque, mon utilisation processeur passe à 100%, et je suis obligé de sauvagement killer le tout.

    Voilà, si quelqu'un a une idée. Dans un premier temps, je pourrais tout mettre dans mon fichier principal, mais je trouve ça goret :/

    Merci par avance
    Starch'[/b][/code]

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut


    ptit question, as tu essayé de remplacer le string par un pchar et enlever l'unit fastsharmem ?

    c'est juste histoire de voir si tu n'aurais pas un comflit avec la derniere unitée. je ne sais pas ce que fait fastsharmem mais peut etre que ton probleme vient de là


    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    merci de ta réponse.

    Oui c'est comme ça que j'avais commencé en fait, avec des PChar et sans le FastShareMem, qui en fait est une unité qui d'après les mecs qui l'ont fait remplace beaucoup mieux l'unité ShareMem fournie par Borland, et c'est libre en plus.

    Mais j'avais le même problème :/

    ++
    Starch'

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    arf je croit avoir trouve le pourquoi du comment
    ça me sauté telement au yeux que je ne le voyait pas

    la clause export dans l'unite doit etre dans la partie interface et
    pas dans la partie implementation


    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 9
    Points : 6
    Points
    6
    Par défaut

    heu... autant pour moi :/

    merci beaucoup
    ++ Starch'

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 01/02/2013, 14h39
  2. Réponses: 18
    Dernier message: 24/05/2006, 17h04
  3. Réponses: 3
    Dernier message: 25/12/2005, 19h43
  4. Réponses: 10
    Dernier message: 02/11/2005, 11h12
  5. [DLL] problème pour appeler une fonction d'une DLL
    Par bigboomshakala dans le forum MFC
    Réponses: 34
    Dernier message: 19/07/2004, 11h30

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