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 :

Problème d'enregistrement de DLL


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 109
    Points : 71
    Points
    71
    Par défaut Problème d'enregistrement de DLL
    Bonjour,
    Je vous resolicite parce que je souhaite effectuer un chargement de dll dans ma base de registres
    donc au lieu de

    regsrv32.exe MaLibrairie.dll (commande qui marche mais que je ne veux pas faire)

    J'ai ecris un programme delphi me permettant cela et ca donne
    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
     
    procedure InscriDLL(Path: string);
    var
     Reg: TRegistry;
     begin
     Reg := TRegistry.Create;
     
     try
      with Reg do begin
       RootKey := HKEY_CLASSES_ROOT; 
       if OpenKey('\CLSID\{07D72B07-3D9A-449E-8790-EAB8751AFB9B}\InprocServer32', True)
               then begin
               WriteString('MaLibrairie.dll', Path);
    end;
     finally
      Reg.Free;
     end;
    end;
    Probleme c'est que normalement ca doit m'afficher une icone sur mon poste de travail et la rien ne se passe pourriez vous m'aider svp?

    Merci bcp

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    je crois simplement qu'il te faut avertir windows du changement...
    avec Delphi 5, ca donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
    N'oublie pas d'ajouter "ShlObj" dans tes uses

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 109
    Points : 71
    Points
    71
    Par défaut
    Merci, j'ai essayé mais ca ne veut pas,
    en fait j'ai remarqué que regsvr32 m'ajoute plusieurs clés en même temps
    pour ma DLL
    Alors j'ai essayé de reproduire le tout mais ca marche pas non plus jje vais voir peut être que c'est du au fait qu'il y a une clé que je ne voi pas?
    Merci
    Si vous avez une idée n'hésitez pas

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Probleme c'est que normalement ca doit m'afficher une icone sur mon poste de travail et la rien ne se passe pourriez vous m'aider svp?
    Qu'est-ce quelle fait au juste ta dll? parce qu'il y a d'autre type
    de message qu'on peux envoyer avec SHChangeNotify.

    dans mon exemple, le parametre SHCNE_ASSOCCHANGED avertis
    windows qu'il y a eu un changement dans l'asssociation des extentions
    de fichier. C'est surment pas le bon type de changement dans ton cas.

    Option 2
    tu peux essayer aussi d'executer
    rundll32.exe MaLibrairie.dll,DLLRegisterServer
    ca devrait faire la meme chose que
    regsrv32.exe MaLibrairie.dll

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Sinon, tu peux essayer ca... j'ai pas beaucoup testé....
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    //******************************************************************************
    //*** Eric Boisvert
    //*** 30 Juin 2005
    //***
    //*** Remplacement de regsvr32.exe de windows pour les enregistrer les dll.
    //*** exemple d'appele:
    //***  RegSvr32( 'c:\winnt\system32\mydll.dll') --> Register mydll.dll
    //***  RegSvr32( 'c:\winnt\system32\mydll.dll','/u') --> UnRegister mydll.dll
    //*** Note: '/s' est toujours implicite!
    //***       '/i' Non supporté
    //***       '/n' Non supporté
    //******************************************************************************
    unit _Regsrv32;
     
    interface
     
    uses
      Sysutils,
      Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs;
     
    // Attente maximum de 20 sec pour enregistrer la dll
    Const
      MaxTimeWait = 20000;
     
     
      function Regsvr32(FullFilePath:string;Option:string=''):Boolean;
     
    implementation
     
     
    function Regsvr32(FullFilePath:string;Option:string=''):Boolean;
    var
      hLib:HMODULE;
      ProcAdr:FARPROC;
      IDThread:Cardinal;
      DllTread:THandle;
      StrFileExt:string;
    begin
      //resultat pessimiste...
      Regsvr32:=FALSE;
      //Verification de l'existance de la dll
      if FileExists(FullFilePath)=FALSE then exit;
      StrFileExt:=UpperCase(ExtractFileExt(FullFilePath));
      Option:=UpperCase(Option);
      if ( (StrFileExt='.DLL') or (StrFileExt='.OCX') )then
      begin
        hLib := LoadLibrary(PChar(FullFilePath));
        if hLib<>NULL then
        begin
            ProcAdr:=nil;
            if Option='' then
            begin
                ProcAdr:= GetProcAddress(hLib, 'DllRegisterServer')
            end;
            if Pos('/U',Option)<>0 then
            begin
                ProcAdr:= GetProcAddress(hLib, 'DllUnRegisterServer')
            end;
            if ProcAdr<>nil then
            begin
                DllTread:=CreateThread(nil,0,ProcAdr,nil,0,IDThread);
                if DllTread<>null then
                begin
                    //*** Now wait some time...
                    if WaitForSingleObject(DllTread, MaxTimeWait)=0 then
                    begin
                        Regsvr32:=TRUE;
                    end;
                    CloseHandle(DllTread)
                end;
            end
            else
            begin
                Regsvr32:=TRUE;
            end;
            FreeLibrary(hLib)
        end;
      end;
    end;
     
     
    end.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 109
    Points : 71
    Points
    71
    Par défaut
    Merci beaucoup, c bon ca marche!!!

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

Discussions similaires

  1. Problèmes de libération de Dll en delphi7 sous windows XP
    Par Tardiff Jean-François dans le forum Langage
    Réponses: 5
    Dernier message: 10/01/2006, 16h30
  2. Problème execution d'une DLL en ASP
    Par turcotm dans le forum ASP
    Réponses: 3
    Dernier message: 03/09/2005, 10h16
  3. problème d'enregistrement de textarea dans bdAccess
    Par pmboutteau dans le forum ASP
    Réponses: 23
    Dernier message: 04/04/2005, 16h10
  4. Problèm d'enregistrement
    Par ludogim dans le forum Bases de données
    Réponses: 2
    Dernier message: 04/06/2004, 12h41
  5. Problème mémoire avec une dll par chargement dynamique
    Par widze19 dans le forum C++Builder
    Réponses: 6
    Dernier message: 15/12/2003, 14h20

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