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

Visual C++ Discussion :

dll qui charge une autre dll


Sujet :

Visual C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    164
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 164
    Par d�faut dll qui charge une autre dll
    Salut,

    Je ne sais plus quoi faire du tout...
    Je fais une dll en vc++ en vue d'une utilisation comme XPcom dans une extension Firefox. Au d�but je m'�tais lanc� dans une dll MFC mais il semblerait que c'est pas trop conseill� pour ce que je veux faire et puis m�me si ma dll et ses fonctions �taient appel�es, �a planter quand m�me.
    Du coup, j'ai refait une dll win32 toute simple. Mais maintenant, je me heurte � une autre probl�me et pas des moindre, ma dll en vc++ ne veut pas charger mon autre dll. pourtant j'ai pas chang� mon code de ce c�t� l�.
    Voici mon cpp en son entier :
    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
     
    #include "stdafx.h"
    #include "comp-impl.h"
    #include <stdlib.h>
     
    NS_IMPL_ISUPPORTS1(CSpecialThing, ISpecialThing)
     
    CSpecialThing::CSpecialThing()
    {
    	/* member initializers and constructor code */
    	mName.Assign(L"Default Name");
    }
     
    CSpecialThing::~CSpecialThing()
    {
    	/* destructor code */
    }
     
     
    /* long add (in long a, in long b); */
    NS_IMETHODIMP CSpecialThing::Add(PRInt32 a, PRInt32 b, PRInt32 *_retval)
    {
    	PRInt32 test;
    	typedef char* (_stdcall *ProcDllPtr)(char* monString);
    	char* reponseDLL;
    	HMODULE hinstDLL=LoadLibrary((LPCWSTR)"C\\DLMDLL.dll");//ma dll est bien là pourtant
    	test=32;
    	if (hinstDLL) {
    		ProcDllPtr ProcExportDll = (ProcDllPtr) GetProcAddress(hinstDLL, "Ajouter_article");
    		reponseDLL=ProcExportDll("sanctification personnel");
    		test=35;
    	} else {
    		test=36;
    	}
    	FreeLibrary((HINSTANCE)hinstDLL);
    	*_retval = test;
    	return NS_OK;
    }
     
    /* attribute AString name; */
    NS_IMETHODIMP CSpecialThing::GetName(nsAString & aName)
    {
    	aName.Assign(mName);
    	return NS_OK;
    }
    NS_IMETHODIMP CSpecialThing::SetName(const nsAString & aName)
    {
    	mName.Assign(aName);
    	return NS_OK;
    }
    elle renvoit toujours 36. c'est � rien y comprendre. Je suis perdu.
    Personne n'aurait sous la main un truc tout simple comme ce que je souhaite faire : une dll en vc++ qui appelle une autre dll. un truc tout b�te?

    Merci

    Simo'

  2. #2
    R�dacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur s�curit� informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Chercheur s�curit� informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par d�faut
    Bonjour,

    A premi�re vue, le chemin est mauvais (manque les deux points ':') :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    LoadLibrary((LPCWSTR)"C\\DLMDLL.dll");
    devrait �tre :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    LoadLibrary( _T("C:\\DLMDLL.dll") ); // deux points après 'C'
    N.B : concernant le code en lui-m�me :

    - Le typedef dans les corps de fonction, m�me si c'est l�gal, n'est pas super lisible. Si tu veux rester dans le scope de la classe, d�clare le dans l'en-t�te.

    - Plut�t que d'utiliser une variable, mieux vaut tester le code de retour de LoadLibrary (soit un HMODULE soit NULL) et formater le code d'erreur retourn� par GetLastError().

    cf. : http://msdn2.microsoft.com/en-us/library/ms680582.aspx

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    164
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 164
    Par d�faut
    Oups... Dans cette version j'avais oubli� de remettre les ':' mais heureusement pour moi c'est pas �a qui bloque... (le de la gaffe... lol)
    je connaissais pas GetLastError() - encore du mal � trouver mon bonheur avec msdn - , je vais essayer de voir ce que �a renvoit.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. export d'une DLL li�e avec une autre DLL
    Par Stabia dans le forum Windows
    R�ponses: 0
    Dernier message: 08/05/2012, 18h25
  2. DLL MultiThread qui lance une autre DLL
    Par rgarnier dans le forum Langage
    R�ponses: 0
    Dernier message: 04/08/2011, 09h42
  3. Compiler une DLL en linkant une autre DLL
    Par Aymeric Suteau dans le forum Visual C++
    R�ponses: 2
    Dernier message: 17/03/2010, 10h29
  4. Programmes/DLL qui utilisent une autre DLL
    Par B.ratak dans le forum Windows XP
    R�ponses: 4
    Dernier message: 26/12/2007, 09h23
  5. une Dll peut elle utiliser les fonctions d'une autre dll?
    Par kantelise dans le forum Windows
    R�ponses: 7
    Dernier message: 18/05/2006, 03h45

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