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 :

[DELPHI 7][DLL] Message d'erreur s'il n'y a pas de DLL


Sujet :

Delphi

  1. #1
    Membre régulier
    Avatar de Stef.web
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2003
    Messages : 104
    Points : 87
    Points
    87
    Par défaut [DELPHI 7][DLL] Message d'erreur s'il n'y a pas de DLL
    Bonjour
    Comment ne pas avoir de message d'erreur si une dll n'est pas présente au démarrage d'une appli?

    plus concretement, je souhaite utiliser un boîtier DMX. Pour l'utiliser, il suffit de faire appel à une dll.

    Cette dll est une option à mon programme et l'utilisateur final n'en a pas forcement besoin (d'où la notion d'option )

    L'appel à la DLL est simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         Function DasUsbCommand(Command, Param: integer; Bloc: PChar): integer;
           cdecl; external 'dashard2006.dll';
    Maintenant, si je fait une mise à jour sans la dll de fournit et que le client lance l'appli, c'est un message d'erreur à coup sur!!!

    Si quelqu'un à une idée, et si quelqu'un à compris ce que j'explique ...

    Amicalement

    Stéf.

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 455
    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 455
    Points : 5 900
    Points
    5 900
    Par défaut
    salut

    Comment appel tu ta dll
    noemalement si tu fait les chose dans les regle de l'art
    tu devrait avoir un handle sur la dll il te suffit donc juste de verifier que celui-ci soit valide

    @+ phil

  3. #3
    Membre régulier
    Avatar de Stef.web
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2003
    Messages : 104
    Points : 87
    Points
    87
    Par défaut
    Comme ça par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
         interface_open := DasUSBCommand(DHC_INIT, 0, nil);
         interface_open := DasUSBCommand(DHC_OPEN, 0, nil);
         if interface_open > 0 then
             v := DasUSBCommand(DHC_DMXOUTOFF, 0, nil)
            else
         begin
              showmessage ('Erreur : Ne trouve pas l''interface "Intelligent USB DMX"');
              application.terminate;
              exit;
         end;
    Je n'utilise donc pas de handle.

    Mon problème se situ à la définition de la fonction que j'utilise (voir le code au 1er post)

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Il te suffit de charger dynamiquement ta DLL à l'aide de LoadLibrary (qui renvoie un handle). En cas d'échec de chargement le handle retourné est égal à 0.
    Ensuite il est facile dans le code de faire appel ou non aux fonctions de ta DLL.

    @+

  5. #5
    Membre régulier
    Avatar de Stef.web
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2003
    Messages : 104
    Points : 87
    Points
    87
    Par défaut
    Merci, il semble que se soit la solutiondont j'ai besoin, néanmoin, as-tu une exemple simple et concret à me proposer?

    Merci par avance.

  6. #6
    Membre régulier
    Avatar de Stef.web
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2003
    Messages : 104
    Points : 87
    Points
    87
    Par défaut
    UP , j'aurais toujours besoin d'un exemple

    Amicalement.

  7. #7
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 294
    Points : 1 949
    Points
    1 949
    Par défaut
    Avec LoadLibrary et Delphi sur google, la première page est de Developpez, avec un morceau de code ...

  8. #8
    Membre éprouvé Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Points : 1 122
    Points
    1 122
    Par défaut
    Salut,

    Il faut utiliser comme indiqué LoadLibrary:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    HANDLE Hnd = LoadLibrary("Nom de la dll", options);
    If not Assigned (Hnd) Then
       // Traiter proprement le cas d'erreur.
    UNe fois la dll chargée en mémoire, il faut avoir définit pour chaque fonction un type fonctionnel qui correspond, et charger avec GetProcAddress.

    Toutes les infos avec une recherche dans la FAQ delphi:
    http://delphi.developpez.com/faq/?pa...pelfonctiondll

  9. #9
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re

    Ben je t'avais oublié !!! Sorry.

    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
    27
    28
    29
    30
    31
    32
    33
    34
     
    interface
     
    var
      MaFonctionDLL: function(const v: Integer): Integer; stdcall;
     
      function LoadDLL(Filename: string): Boolean;
      procedure FreeDLL;
     
     
    implementation
     
    var
      hDLL: Cardinal;
     
    function LoadDLL(Filename: string): Boolean;
    begin
      result := True;
      // Chargement de la DLL
      hDLL := LoadLibrary(PChar(Filename));
      if (hDLL <> 0) then
        begin
          @MaFonctionDLL := GetProcAddress(hDLL, 'MaFonction');
          if (@MaFonctionDLL = nil) then
            ShowMessage('fonction ''MaFonctionDLL'' non chargée');
        end;
      else
        result := False;
    end;
     
    procedure FreeDLL;
    begin
      if (hDLL <> 0) then FreeLibrary(hDLL); //libération de la DLL
    end;
    Au lancement de ton appli tu essayes de charger ta DLL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      LoadDLL('MaDLL.dll');
    Tu n'oublies pas de la décharger en quittant:
    La variable hDLL est à zéro si la DLL n'a pas été chargée. Donc ensuite à toi de gérer les appels ou non.

    @+ Claudius.

  10. #10
    Membre régulier
    Avatar de Stef.web
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2003
    Messages : 104
    Points : 87
    Points
    87
    Par défaut
    Merci pour ta réponse, je n'avais pas vu que m'avais répondu . ...

    Je pense que ça devrai suffir pour que je puisse tester.

    @+

    Stéf

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

Discussions similaires

  1. Message d'erreur: Un composant ActiveX ne peut pas créer un objet
    Par amnass dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 22/05/2009, 08h12
  2. Le message d'erreur du PassREcovery ne s'affiche pas
    Par zooffy dans le forum ASP.NET
    Réponses: 2
    Dernier message: 18/03/2009, 01h47
  3. msstdfmt.dll : message d'erreur
    Par accon dans le forum Installation, Déploiement et Sécurité
    Réponses: 0
    Dernier message: 13/02/2009, 08h24
  4. Réponses: 5
    Dernier message: 04/10/2007, 10h38
  5. Réponses: 6
    Dernier message: 03/09/2003, 11h29

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