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 :

[D6] Charger dynamiquement une DLL


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut [D6] Charger dynamiquement une DLL
    Je cherche à accéder dynamiquement à une DLL (car elle n'existe pas sous NT), mais j'obtiens une violation d'accès à l'appel de la fonction de la DLL.

    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
    var
      FnMafonction : function (lpUsername: PWideChar; lpDomain: PWideChar; lpPassword: PWideChar; dwLogonFlags: DWORD; lpApplicationName: PWideChar; lpCommandLine: PWideChar; dwCreationFlags: DWORD; lpEnvironment: Pointer; lpCurrentDirectory: PWideChar; const lpStartupInfo: TStartupInfo; var lpProcessInfo: TProcessInformation): Bool; 
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
       LDLLhandle: THandle;
      StartupInfo: TStartupInfo; 
      ProcessInfo: TProcessInformation; 
       bval: Boolean;
    begin
       //.Ici, je charge la DLL.
       LDLLhandle:= LoadLibrary(PChar(ExtractFilePath(Application.ExeName) + 'advapi32.dll'));
       try
          if LDLLhandle<>0 then
          begin
             //.La fonction qui m'intéresse.
             @FnMafonction:= GetProcAddress(LDLLhandle,'CreateProcessWithLogonW');
             if @FnMafonction<>nil then
             begin
                FillChar(StartupInfo, SizeOf(StartupInfo), 0);
                StartupInfo.cb := SizeOf(StartupInfo);
                StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
                StartupInfo.wShowWindow := SW_SHOWNORMAL;
     
                // VIOLATION D'ACCES  ICI.
                bval := FnMafonction('Admin', 'Domaine', 'MDP', 1, nil, 'regedit', CREATE_DEFAULT_ERROR_MODE, nil, nil, StartupInfo, ProcessInfo);
     
                if not bval then
                   ShowMessage('Erreur');
             end;
          end
          else
             MessageBoxA(0, PChar('Erreur de chargement de dll'),'',MB_ICONSTOP);
       finally
          if LDLLhandle<>0 then
             FreeLibrary(LDLLhandle);
       end;
    Y a t'il quelque chose que j'ai oublié ?

    :
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  2. #2
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Salut
    Essaie de caster tes strings en PChar
    genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bval := FnMafonction(PChar('Admin'), PChar('Domaine'),...);
    Et aussi, ajoute la convention d'appel de la fonction lors de sa déclaration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fnMafonction:function(...);stdcall;//ou cdecl ou les autres ^^
    Bon dev
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  3. #3
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Citation Envoyé par Pedro204
    Et aussi, ajoute la convention d'appel de la fonction lors de sa déclaration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fnMafonction:function(...);stdcall;//ou cdecl ou les autres ^^
    Bon dev
    Bien vu !
    C'était tout bêtement ça.

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

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

Discussions similaires

  1. [C#][1.1] Comment ouvrir en dynamique une dll
    Par jmperuchot dans le forum C#
    Réponses: 11
    Dernier message: 19/02/2009, 09h46
  2. Charger dynamiquement une classe qui n'est pas dans un jar
    Par rastakouair dans le forum Langage
    Réponses: 12
    Dernier message: 17/12/2007, 19h22
  3. [WPF] Charger dynamiquement une typo ?
    Par UNi[FR] dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 05/12/2007, 17h49
  4. Comment charger dynamiquement une unité ?
    Par morgane76 dans le forum Langage
    Réponses: 4
    Dernier message: 25/10/2007, 10h10
  5. Réponses: 4
    Dernier message: 15/06/2007, 15h08

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