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] Chargement dynamique a base d'index


Sujet :

Langage Delphi

  1. #1
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut [Dll] Chargement dynamique a base d'index
    Apres plusieurs essais, j'ai du mal a charger dynamiquement une dll et ses procedures (GetProcAdress) en fonction de l'index d'exportation.

    Qqun aurait il un exemple a me proposer ?
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  2. #2
    Membre actif
    Profil pro
    ----
    Inscrit en
    Mai 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Mai 2004
    Messages : 185
    Points : 245
    Points
    245
    Par défaut
    J'ai pas d'exemple, je ne l'ai jamais fait de façon dynamique... mais en cas de pépin tu devrait pouvoir accéder à l'adresse de base du module que tu a charger. Avec cette information tu devrais pouvoir obtenir tout ce que tu veux a partir de l'entête PE...
    J'espaire ne pas poluer ton thread
    De toutes les choses que j'ai perdue,
    Celle qui me manque le plus...
    c'est mon esprit !

  3. #3
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Bien au contraire, tu m'interesse ....
    tout ce que je veux cad ??
    C'est quoi l'entete PE ?

    Je cherche a generer un paquet (ou une dll c pareil) qui puisse me permetre d'exporter des fonctions sans connaitre le nom a l'avance (grace a l'index)

    Si en plus ton systeme me permet d'exporter des methodes sans connaitre a l'avance le nombre et le type de parametres c encore mieux !
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  4. #4
    Membre actif
    Profil pro
    ----
    Inscrit en
    Mai 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Mai 2004
    Messages : 185
    Points : 245
    Points
    245
    Par défaut
    L'entête PE (Portable Executable) est la structure que windows emplois pour definir ces executable. Elle contient les ressource, les adresse des fonctions exporter avec leur nom et leur adresse d'entrée dans le fichier. Je peut pas te dire en 2 coup de cuillaire a pot comment on fait (c'est un peut hard de gére le PE quand même). Par contre le site http://win32asm.cjb.net/ contient dans la section Tutorials des tuto sur l'entête PE. Le site et en anglais type internet . C'est relativement compréhensible .

    Par contre... c'est importer ou exporté que tu veux ?
    De toutes les choses que j'ai perdue,
    Celle qui me manque le plus...
    c'est mon esprit !

  5. #5
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Par contre... c'est importer ou exporté que tu veux ?
    Ben les 2 forcement ^^ puisque je developpe les 2 applications

    Pour l'exportation ca va ... (a moins qu'il ne faille ecrire plus que le mots clef Index X)

    Pour l'importation, je ne sais pas comment gerer le GetProcAddress .. on m'a dit de mettre l'index sous forme de chaine mais il refuse.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  6. #6
    Membre actif
    Profil pro
    ----
    Inscrit en
    Mai 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Mai 2004
    Messages : 185
    Points : 245
    Points
    245
    Par défaut
    ok...
    Alors pour l'importation, l'analyse de l'entête PE devrais te donné des résultat pas trop mauvais (pour pas dire bon )... par contre, GetProcAddress te permet juste de trouver l'adresse d'une fonction don tu connait le nom... pas l'index (enfin je crois ).
    De toutes les choses que j'ai perdue,
    Celle qui me manque le plus...
    c'est mon esprit !

  7. #7
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    J'ai trouvé ca sur l'aide Delphi ... mais j'arrive pas a le mettre en place :/

    et puis c quoi un ".DEF" ?!?
    J'en ai pas moi :/

    lpProcName

    Points to a null-terminated string containing the function name, or specifies the function's ordinal value. If this parameter is an ordinal value, it must be in the low-order word; the high-order word must be zero.
    The lpProcName parameter can identify the DLL function by specifying an ordinal value associated with the function in the EXPORTS statement. GetProcAddress verifies that the specified ordinal is in the range 1 through the highest ordinal value exported in the .DEF file. The function then uses the ordinal as an index to read the function's address from a function table. If the .DEF file does not number the functions consecutively from 1 to N (where N is the number of exported functions), an error can occur where GetProcAddress returns an invalid, non-NULL address, even though there is no function with the specified ordinal.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  8. #8
    Membre actif
    Profil pro
    ----
    Inscrit en
    Mai 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Mai 2004
    Messages : 185
    Points : 245
    Points
    245
    Par défaut
    Bon... b'en jai dit un connerie pour le PE enfin c'est juste qu'il y'a plus simple que de ce le tapper a la main .

    Pour GetProcAdresse... le .DEF tu t'en branle... c'est quand tu compile... il faut que tu fournisse un chaine de caractère formater spécialement pour l'ocasion...
    Je m'explique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    lpProcName
     
    Points to a null-terminated string containing the function name, or specifies the function’s ordinal value. If this parameter is an ordinal value, it must be in the low-order word; the high-order word must be zero.
    Le mot de poids fort doit être a 0, les deux premier caractère de ta chaine sont donc #0.
    Le mot de pois faible doit contenir l'index de ta procedure, soit le 3éme caracatére avec comme valeur les 8 bits de poids fort de ton index (0 si index < 255) et le dernie les 8 bits de poids faible... ça devrais marcher comme ça [/code]
    De toutes les choses que j'ai perdue,
    Celle qui me manque le plus...
    c'est mon esprit !

  9. #9
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    sur les PE, et en français :
    La documentation francaise sur le PE : glayag.free.fr
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  10. #10
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Oki merci pour ces Infos
    Effectivement ... J4avais pas vu la traduction sous cet angle :/ (cad WORD au sens Octale du therme .....)
    J'avais essayé '01' mais sans succes :/

    Bon j'essaye et je poste la soluce des que j'ai.
    Merci :p
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  11. #11
    Membre actif
    Profil pro
    ----
    Inscrit en
    Mai 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Mai 2004
    Messages : 185
    Points : 245
    Points
    245
    Par défaut
    ta pas compris ce que je voulait dire... (en fait... je me suis mal exprimer )
    Le caractère String[0] doit être egale au caractère ascii d'index 0 (#0 en delphi)
    Le caratère String[1] doit être égale au caractère ascii d'index 0
    ...
    En fait, tu met ton index de fonction dans un cardinal, puis tu utilise la procédure Move pour copier les 4 premiè octet de ton Cardinal (qui faut 4 octet dailleur ) vers les 4 premièe octet d'une chaine de caractère... Et tu passe le résultat a ta fonction
    En gros, tu envoie un double mot (32bits) sous la forme d'un chaine...

    @tourlourou: C'est plus cool en fraçais . J'avais pas encore trouver de cite pareille
    De toutes les choses que j'ai perdue,
    Celle qui me manque le plus...
    c'est mon esprit !

  12. #12
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    et tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @p := GetProcAddress(h, #0#0#0#1);
    PArceque la ca foire ;pppp
    (toutes combinaisons ....)
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  13. #13
    Membre actif
    Profil pro
    ----
    Inscrit en
    Mai 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Mai 2004
    Messages : 185
    Points : 245
    Points
    245
    Par défaut
    Citation Envoyé par Clorish
    et tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @p := GetProcAddress(h, #0#0#0#1);
    PArceque la ca foire ;pppp
    (toutes combinaisons ....)
    normale... '#0#0#0#1' est une constante... et si je ne me trompe, l'API windows voudrait le pointeur vers cette varibale, dou la magouille avec les variable
    De toutes les choses que j'ai perdue,
    Celle qui me manque le plus...
    c'est mon esprit !

  14. #14
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Pas mieux ......
    De toutes facon, on appelle bien la procedure de la meniere suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @p := GetProcAddress(h, 'Toto');
    Alors pkoi ca marcherais pas :/

    Par contre la je commence a desesperer .... Impossible a trouver de l'aide sur Internet .... pour une chose qui me semblais si facile :/
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  15. #15
    Membre actif
    Profil pro
    ----
    Inscrit en
    Mai 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Mai 2004
    Messages : 185
    Points : 245
    Points
    245
    Par défaut
    Ben j'ai encore dit une connerie Alors ... mais c'est pas grave... ça commence a devenir une abitude en fait

    Pour notre problème, il faut que le mot de poids forts soit a 0 et que le mot de poids faible contienne l'index...
    #0#0#0#1 n'est donc pas bon, puisque le mot de poid le plus faible est le premier (oui oui... j'ai bien dit que j'avais dit des connerie ), du au principe de stocage en mémoire des processeur Intel.
    ce serais plutôt #1#0#0#0... si ça marche toujours pas... promis que je te le fait sesoir (ou... demain soir ) !!!
    De toutes les choses que j'ai perdue,
    Celle qui me manque le plus...
    c'est mon esprit !

  16. #16
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    DEvine !!!!

    Ca marche pô !!!

    Peut etre que je fait autant de betises que toi :/ alors la on est pas rendu .....

    JE crois que je vais rester avec les noms de procs le temps que qqun me donne le code correct ;p
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  17. #17
    Membre actif
    Profil pro
    ----
    Inscrit en
    Mai 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Mai 2004
    Messages : 185
    Points : 245
    Points
    245
    Par défaut
    Bon... ben jsuis partie pour coder ce soir moi
    Je vois quand je rentre cher moi et je te tient au courant
    De toutes les choses que j'ai perdue,
    Celle qui me manque le plus...
    c'est mon esprit !

  18. #18
    Membre actif
    Profil pro
    ----
    Inscrit en
    Mai 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Mai 2004
    Messages : 185
    Points : 245
    Points
    245
    Par défaut
    J'ai trouver... j'aitai trop bête... désoler ...
    Le paramètre que l'on passe effectivement a GetProcAdress est un pointeur on est d'accord... en fait c'est ce pointeur qui doit être initialiser avec la valeur de l'index de la procedure dont tu désire l'adresse... autrement dit le paramètre doit être initialiser de la façon suivante :
    Ensuite, si tu apelle GetProcAdress avec comme second paramètre pFnc (qui est un pointeur ) la fonction retourne la bonne valeur. C'est a dire l'adresse de la procedure ayant pour index 1 dans cette exemple ...
    C'etait pas la string qu'il falait paramètrer bizarement, mais le pointer...

    Le pire... c'est que je le savait
    De toutes les choses que j'ai perdue,
    Celle qui me manque le plus...
    c'est mon esprit !

  19. #19
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Ben en voila une bonne nouvelle

    Bon, la j'ai pas le temps mais je teste tout ca demain bien sur !!
    en tout cas merci pour ces infos, et le temps passé sur le probleme.

    Moi je dit : destination FAQ, SOURCES et TUTOS ;p
    Developpez .... le premier site mondial qui parle du chargement de procedures DLL par index
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  20. #20
    Membre actif
    Profil pro
    ----
    Inscrit en
    Mai 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Mai 2004
    Messages : 185
    Points : 245
    Points
    245
    Par défaut
    ça marche de sur... j'ai fait les test hier soir... j'imagine que ça doit fonctionner pour toi aussi maintenant...

    Par contre... songe a la balise Résolue
    De toutes les choses que j'ai perdue,
    Celle qui me manque le plus...
    c'est mon esprit !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. dll chargement dynamique.
    Par Kalite dans le forum C++
    Réponses: 6
    Dernier message: 28/02/2012, 14h23
  2. [MFC VC.NET] Chargement dynamique de DLL
    Par vanitom dans le forum MFC
    Réponses: 3
    Dernier message: 26/01/2005, 13h56
  3. 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, 13h20
  4. Dll a chargement dynamique
    Par delire8 dans le forum C++Builder
    Réponses: 7
    Dernier message: 05/06/2003, 22h47
  5. Chargement dynamique de DLL sous Unix
    Par Willou dans le forum Autres éditeurs
    Réponses: 7
    Dernier message: 18/12/2002, 18h25

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