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

Assembleur Discussion :

Appel d'une DLL Win32 à partir d'une appli DOS 16bit


Sujet :

Assembleur

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Appel d'une DLL Win32 à partir d'une appli DOS 16bit
    Bonjour,
    Je suis en train d’essayer de faire communiquer une application DOS 16 bit (ce n’est pas une Win16) écrite en assembleur (TASM) avec une DLL Win32(C++). L’application DOS devra appeler des fonctions exportées par la DLL via le mécanisme « generic thunk ». Pouvez vous m’informer si cette solution est faisable. Et si oui, quelles sont les grandes lignes de la solution.
    Merci de votre aide.

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 938
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Bonjour et bienvenue !

    S'il s'agit réellement d'une application DOS 16 bits, j'ignore si la technique du thunking générique est applicable (alors que c'est relativement simple en Win16).
    Il existe, sur les OS de la famille NT, une technique qui tire parti d'une exception provoquée volontairement dans la machine DOS virtuelle (NTVDM.EXE) mais c'est vraiment très pointu.

    Si tu veux, je peux essayer de retrouver les sources (Pascal) d'Eric Sigoillot.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Oui il s'agit bien d'une application DOS 16 bits et non Win16.
    Merci pour l'idée

  4. #4
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 938
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Voici donc le résultat du travail d'Eric Sigoillot. Tout repose sur l'introduction dans le code de deux octets : C4C4h. Voici les explications d'Eric :
    A priori, sous Dos, impossible d'appeler une fonction de NTVDM, qui est une application 32 bits. C'est là qu'intervient la fameuse combinaison C4C4h. En effet, cet opcode est totalement incompatible avec le processeur. Résultat ? Plantage normalement ! Mais c'est sans compter sur le fait que le Dos n'est qu'émulé sous NT. Ainsi, NTVDM va récupérer l'erreur et l'analyser. NTVDM est ainsi conçu pour entreprendre une action particulière si l'erreur est déclenchée par C4C4h. Si c'est le cas, il lit l'octet ou les deux octets qui suivent notre opcode magique pour se décider. S'il est inconnu, plantage assuré ! Mais sinon, c'est tout bon...
    Ainsi, je connais 4 numéros de fonctions qui servent à : charger une VDD (une DLL 32 bits particulière), le décharger, appeler une fonction d'un VDD, et rendre la main au VDD après un appel particulier. Victoire !
    Et voici les sources : http://pascal.developpez.com/sources/fichiers/VDD.zip
    Dans le zip se trouvent deux "sous-zip" : un pour Dos et un pour Windows :
    • vddwin.zip : contient les fichiers sources pour compiler le VDD sous Delphi.
    • vddos.zip : contient l'interfaçage pour Dos avec le VDD : unités NTVDM et Clipbrd. Pour compiler le tout, il y a besoin de Vbe2, Vbe2Ext (facultatif, par directive de compilation) et Xms. Le coeur du sujet se situe bien sûr dans NTVDM, Clipbrd servant d'exemple avec la gestion du presse-papiers.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour cet exemple.
    Par contre , je n'arrive pas a compiler la dll.
    D'après mon compilo (Borland Delphi 5) Il manque VDDTimer.dcu
    Rq: Je ne connai pas très bien delphi. Pouvez me dire où trouvez cette unité.
    Merci d'avance,

  6. #6
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 938
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par telghali
    Il manque VDDTimer.dcu
    En effet. J'ai retrouvé pourquoi :
    Citation Envoyé par Eric Sigoillot
    vddwin.zip : contient les fichiers sources pour compiler le VDD sous Delphi. Je n'ai pas mis VDDTimer, car cette portion n'est pas
    fonctionnelle du tout. Mais pour le reste (presse-papiers en particulier),
    c'est tout bon.
    La gestion du timer n'étant pas indispensable, tu peux retirer les appels à VDDTimerInitialization et VDDTimerFinalization et compiler la dll.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

Discussions similaires

  1. Appel d'une fonction global à partir d'une DLL
    Par JeanNoel53 dans le forum C++Builder
    Réponses: 6
    Dernier message: 10/12/2010, 14h24
  2. Réponses: 1
    Dernier message: 19/03/2008, 07h57
  3. Réponses: 1
    Dernier message: 24/04/2007, 09h27
  4. Afficher une Fenêtre MDI à partir d'une DLL
    Par FredericB dans le forum C++Builder
    Réponses: 2
    Dernier message: 06/12/2005, 16h58
  5. [DLL] utiliser une DLL a partir d' une DLL et un .def
    Par venomelektro dans le forum MFC
    Réponses: 9
    Dernier message: 07/12/2004, 14h01

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