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++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 164
    Points : 67
    Points
    67
    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
    Points : 1 956
    Points
    1 956
    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 du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 164
    Points : 67
    Points
    67
    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