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

C++ Discussion :

Adresse absolu de la dll dans un Webservice


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 59
    Points : 49
    Points
    49
    Par défaut Adresse absolu de la dll dans un Webservice
    Bonjour,

    J'utilise IIS pour héberger un webservice.

    Ma dll doit appeler un executable via un createProcess. Ma .dll et mon .exe sont dans le même dossier "C:\Inetpub\wwwroot\ErenetGateway\bin".

    Mon soucis est que, le répertoire courant est celui de IIS, à savoir "C:\WINDOWS\system32\inetsrv". Afin de retrouver le chemin de mon executable, j'ai donc écrit ceci :



    CString ls_module_name ;
    CString ls_commande_line ;

    // Récupération du chemin du module
    DWORD taille = 1024 ;
    char lsz_chemin[1024] ;
    GetModuleFileName( AfxGetInstanceHandle(), lsz_chemin, taille ) ;
    CString ls_chemin( lsz_chemin ) ;
    ls_chemin = ls_chemin.Mid( 0, ls_chemin.ReverseFind('\\') );

    // nom de l'exécutable
    ls_module_name = "ErenetClientGetEtat.exe" ;

    // command line
    ls_commande_line.Format( "%s\\%s %s %u %d URL=%s", ls_chemin, ls_module_name, ls_session_id, this->ihwnd_requestor, this->il_msg_requestor, this->is_url ) ;

    // exécution
    if ( !CreateProcess(
    NULL, // Module name.
    ( char * ) LPCTSTR( ls_commande_line ) , // Command line.
    NULL, // Process handle not inheritable.
    NULL, // Thread handle not inheritable.
    FALSE, // Set handle inheritance to FALSE.
    0, // No creation flags.
    NULL, // Use parent's environment block.
    NULL, // Use parent's starting directory.
    &astr_process.si, // Pointer to STARTUPINFO structure.
    &astr_process.pi ) // Pointer to PROCESS_INFORMATION structure.
    )
    {
    // erreur
    lb_ok = false ;
    as_lib_erreur.Format( "Impossible de lancer le processus de surveillance : erreur %d", GetLastError() ) ;
    }


    Mais celà ne fonctionne pas non plus puisque la encore, j'obtient le chemin de l'executable de IIS.
    Y a-t-il un moyen de retrouver l'adresse de ma dll ?

    Merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Le seul moyen que je connaisse, c'est mémoriser le HMODULE de la DLL dans une variable globale dans le DllMain().
    (pour une DLL sans MFC ou une DLL d'extension MFC, ça marche ainsi).

    Pour une MFC Regular DLL, il me semble que AfxGetInstanceHandle doit retourner le handle de la DLL.

    Sinon, tu peux toujours faire GetModuleHandle(le nom de ta DLL) mais ça risque de ne plus marcher si le nom de ta DLL a changé...

    Un autre truc, c'est GetModuleHandleEx() sur un Windows récent : Tu peux lui passer l'adresse d'une fonction dans la DLL et il te retrouve le HMODULE...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 59
    Points : 49
    Points
    49
    Par défaut
    Merci,

    je vais tester ça et je vous tiend au courant

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Ma dll doit appeler un executable via un createProcess
    Si par appeler tu entends executer system peut le faire aussi system("Tonexe")il faut s'assurer par contre que la variable path soit bien renseignée .

Discussions similaires

  1. [DLL] Afficher le contenu d'une dll dans un Tpanel
    Par Fabs dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/08/2007, 14h30
  2. modifier l'adresse d'un dll dans un .exe
    Par Mr Meuble dans le forum Windows
    Réponses: 4
    Dernier message: 02/03/2004, 16h39
  3. Inclure une dll dans une ressource
    Par bgcode dans le forum C++Builder
    Réponses: 4
    Dernier message: 21/08/2003, 11h12
  4. [] Utiliser AVI d'une DLL dans mon programme
    Par seb.49 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/05/2003, 14h52
  5. Adresse des polices de caractères dans la RAM video ?
    Par Anonymous dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 27/05/2002, 17h29

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