Testé dll c++

Signaler
Messages postés
62
Date d'inscription
dimanche 1 octobre 2006
Statut
Membre
Dernière intervention
21 mars 2010
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
Salut
mon dll que je veux testé est :
Header
/* verify that the <rpcndr.h> version is high enough to compile this file*/
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 440
#endif

#include "stdafx.h"
#include "rpc.h"
#include "rpcndr.h"
#include <string>

using namespace std;

#ifndef __DLLTEST_h__
#define __DLLTEST_h__

#define EXPORT __declspec(dllexport);

#ifdef __cplusplus
extern "C"{
#endif 

EXPORT string __stdcall GetTypeConnexion(string PS_szTypeConnexion, string PS_szLibelleErreur);

#ifdef __cplusplus
}
#endif

#endif

.cpp
#include "stdafx.h"
#include "resource.h"
#include 
#include "DLLTEST.h"
#include <fstream>
#include <string>
#include "DLLTEST.c"

// Taille maximale de l'url
#define TAILLE_MAX 1000 
using namespace std;

char    CODEERREUR;
string  LIBELLEERREUR;
char    MODEDECONNEXION;
string GetURL() {
ifstream fichierConfig("DLLTEST.config" );
string pURL = "";
if (fichierConfig) {
getline(fichierConfig,pURL);
if (pURL == "") {
CODEERREUR = '9';
LIBELLEERREUR = "Fichier DLLTEST.config vide";
MODEDECONNEXION = 'S';
return pURL;
}

    } else {

// Si fichier introuvable
CODEERREUR = '9';
LIBELLEERREUR = "Fichier DLLTEST.config non trouvé";
MODEDECONNEXION = 'S';
return pURL;
}

return pURL;
}
string  __stdcall GetTypeConnexion(string PS_szTypeConnexion, string PS_szLibelleErreur) {

// Chargement du module DLL
HINSTANCE  hDLL = LoadLibrary("uneautredlldotnetacharger.dll");

string modeCnx;
string codeErr;

if (hDLL != NULL) {


typedef char *DLL_Function_getTypeConnexion (string pURL);

// instantiation de la fonction getTypeConnexion
DLL_Function_getTypeConnexion *fn_getTypeConnexion;

// Chargement en mémoire
fn_getTypeConnexion = (DLL_Function_getTypeConnexion*)GetProcAddress(hDLL,"getTypeConnexion");

// Lecture de l'url sur DLLTEST.config
string pURL = GetURL();

if (pURL != "") {
// Appel de la méthode getTypeConnexion()
MODEDECONNEXION = *fn_getTypeConnexion(pURL);

} else {
MODEDECONNEXION = 'S';
}
modeCnx = MODEDECONNEXION;
codeErr = CODEERREUR;
FreeLibrary(hDLL);
}
return string(modeCnx) + string(codeErr) + LIBELLEERREUR;
}


J'ai ajouté au projet mon fichier .def.
Je veux ajouter un programme pour testé cette dll ou bien ajouter des message pour testé que l'appel du dll dotnet ça se passe comme il le faut.
Merci

A vs

5 réponses

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
Salut,

Ah, heu... C'est la dll que tu comptes mettre entre la dll native et la dll .NET, comme précisé dans ce thread ?

Alors en fait, c'est pas parce que tu fais un LoadLibrary d'une dll .NET dans un dll que ça va mieux marcher que dans un .exe.

Une dll .NET ça propose des classes. C'est pas compilé en natif. C'est pas avec un LoadLibrary que tu vas pouvoir agir dessus.
Après, bon, tu es sûr que c'est une dll .NET ? Pour info, c'est pas parce qu'une dll a été compilé avec Visual Studio .NET qu'elle est en .NET... Mais si elle a été compilée en C# ou en VB.NET, c'est du .NET, c'est sûr.

Tu as essayé un coup de depends dessus ?
Messages postés
62
Date d'inscription
dimanche 1 octobre 2006
Statut
Membre
Dernière intervention
21 mars 2010
6
Salut
Oui c'est une dll .NET compilé en C#, je suis sur.
Pour le dependency walker, je l'ai essayer mais j'ai pas vu la methode que je doit appelé.
Merci

A vs
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
Eh bien oui, comme c'est du C#, dependency walker est perdu.
Une dll C# ne s'utilise pas du tout comme une dll classique...

J'ai oublié la procédure exacte (Quelqu'un l'a posté sur ce fofo il y a peu...). C'est plus ou moins dans la configuration du projet quoi. Après, on peut utiliser les classes de la dll comme si on avait leur code dans notre projet.

Quelque chose dans ce genre là.
Messages postés
62
Date d'inscription
dimanche 1 octobre 2006
Statut
Membre
Dernière intervention
21 mars 2010
6
Le problème c'est que je peux pas modifier la dll .net, si y'aura des modifs pour que mon programme marche, je doit l'implémenter dans le prg c++.
quelqu'un m'a parlé des COM, ça je le comprend pas!!


A vs
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
Je ne te parles pas de modifier la dll, mais de l'utiliser, dans une dll .NET (Qui proposera effectivement une interface COM).

3 dlls :
[list]
[*] Une dll(1) C# dont tu n'as pas le source.
[*] Une dll(2) en .NET (C#, ou C++ CLI) avec la dll(1) dans ses référence de manière à utiliser les classes .NET contenue dans la dll(1). dll(2) propose une interface COM contenant les fonctionnalité de la dll(1). En interne, elle appelle dll(1) pour implémenter ces fonctionnalités.
[*] Une dll(3), en C++ natif, qui exploite l'interface COM de la dll(2), et donc peut finalement interagir avec la dll(1) en passant par la dll(2).
/list
Pour réaliser la dll(2), il faut que tu ajoutes la dll(1) au projet (Pas avec LoadLibrary !!!! C'est de la configuration ! Ajout de référence ou quelque chose comme ça.) et que tu suive ce tuto pour en faire une dll .NET qui propose une interface COM.