Probleme link c++
seb8334
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour
J'ai un probleme de link dans mon programme c++ suivant :
--------------------------------------------------------------------
#include "stdafx.h"
#include "Global.asax.h"
#include <windows.h>
#include "testDLLClass.h"
//using namespace std;
namespace testDLL
{
int testDLLClass::Multiply(int i,int j){
//HMODULE hDLL = LoadLibrary("maDLL.dll");
/*
//on declare un pointeur sur la fonction (avec des 2 parametre ici pour multiply)
typedef int (WINAPI * DLL_Function_Multiply)(int _Value,int _Value2);
DLL_Function_Multiply pfn_Multiply;
//on appelle GetProcAddress(hdll,NOM_DE_LA_FONCTION_DANS_FICHIER_.REF);
pfn_Multiply = (DLL_Function_Multiply)GetProcAddress(hDLL,"Multiply");
//on appelle la fonction
int res = pfn_Multiply(i,j);
//on libère la DLL
FreeLibrary(hDLL);
//return res;
*/
return i*j;
}
};
-----------------------------------------
cela me dit :
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\ServProv.h(93): error C2872: 'IServiceProvider' : ambiguous symbol
si je commente la declaration #include <windows.h>
cela marche mais j'en ai besoin pourl faire l'appel a la dll
merci d'avance car je galere vraiment
J'ai un probleme de link dans mon programme c++ suivant :
--------------------------------------------------------------------
#include "stdafx.h"
#include "Global.asax.h"
#include <windows.h>
#include "testDLLClass.h"
//using namespace std;
namespace testDLL
{
int testDLLClass::Multiply(int i,int j){
//HMODULE hDLL = LoadLibrary("maDLL.dll");
/*
//on declare un pointeur sur la fonction (avec des 2 parametre ici pour multiply)
typedef int (WINAPI * DLL_Function_Multiply)(int _Value,int _Value2);
DLL_Function_Multiply pfn_Multiply;
//on appelle GetProcAddress(hdll,NOM_DE_LA_FONCTION_DANS_FICHIER_.REF);
pfn_Multiply = (DLL_Function_Multiply)GetProcAddress(hDLL,"Multiply");
//on appelle la fonction
int res = pfn_Multiply(i,j);
//on libère la DLL
FreeLibrary(hDLL);
//return res;
*/
return i*j;
}
};
-----------------------------------------
cela me dit :
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\ServProv.h(93): error C2872: 'IServiceProvider' : ambiguous symbol
si je commente la declaration #include <windows.h>
cela marche mais j'en ai besoin pourl faire l'appel a la dll
merci d'avance car je galere vraiment
A voir également:
- Probleme link c++
- Family link localisation - Télécharger - Guide protection
- Family link le temps ne correspondent pas - Forum Contrôle parental
- Problème family link - Forum Gmail
- Family link se debloque tout seul - Forum Huawei
- Family link problème limite quotidienne ✓ - Forum Huawei
3 réponses
Bonjour,
pour la ligne :
#include <windows.h>
dans mon bouquin, la déclaration sous <windows.h>
doit se faire "windows.h", l'utilisation des " <> " ne se
fait qu'avec les nouvelles librairies [ C++ ] qui n'ont
pas d'extension [ .h ].
ex.:
#include <iostream>
#include "window.h"
Lupin
pour la ligne :
#include <windows.h>
dans mon bouquin, la déclaration sous <windows.h>
doit se faire "windows.h", l'utilisation des " <> " ne se
fait qu'avec les nouvelles librairies [ C++ ] qui n'ont
pas d'extension [ .h ].
ex.:
#include <iostream>
#include "window.h"
Lupin
Non je ne suis pas tout à fait d'accord :
- les headers de la libc standard s'incluent avec < > et sans .hpp ou .h au bout :
- les headers contenus dans les répertoire d'include (LD_LIBRARY_PATH sous linux) s'incluent avec < > mais avec l'extenstion :
- les autres headers s'incluent avec des " " :
- si c'est un haeder C, pour que ça marche avec tout les compilateurs :
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\ServProv.h(93): error C2872: 'IServiceProvider' : ambiguous symbol
Tu fais rférence à une erreur mais tu ne nous a pas donné le code correspondant (ligne 93 de c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\ServProv.h). A priori tu as défini deux fois le symbole 'IServiceProvider'.
C'est assez surprenant mais c'est peut être simplement que les deux namespaces pour ces deux symboles sont différents et que par le biais des using namespace, ton compilateur est perdu. Exemple
Auquel cas tu t'en sors en supprimant :
et en manipulant :
Bonne chance
- les headers de la libc standard s'incluent avec < > et sans .hpp ou .h au bout :
#include <string> #include <iostream>
- les headers contenus dans les répertoire d'include (LD_LIBRARY_PATH sous linux) s'incluent avec < > mais avec l'extenstion :
#include <malibrairie/plop.hpp>
- les autres headers s'incluent avec des " " :
#include "tapir.hpp"
- si c'est un haeder C, pour que ça marche avec tout les compilateurs :
extern "C"{ #include <string.h> }
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\ServProv.h(93): error C2872: 'IServiceProvider' : ambiguous symbol
Tu fais rférence à une erreur mais tu ne nous a pas donné le code correspondant (ligne 93 de c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\ServProv.h). A priori tu as défini deux fois le symbole 'IServiceProvider'.
C'est assez surprenant mais c'est peut être simplement que les deux namespaces pour ces deux symboles sont différents et que par le biais des using namespace, ton compilateur est perdu. Exemple
namespace plop1{ class IServiceProvider{ ... }; }; namespace plop2{ class IServiceProvider{ ... }; };
Auquel cas tu t'en sors en supprimant :
using namespace plop1; using namespace plop2;
et en manipulant :
plop1::IServiceProvider plop2::IServiceProvider
Bonne chance
Bonjour mamiemando,
en fait je comprends un peu ta rèticence !
mais je crois aussi que ce sont des traces du C !
voici le texte de Deitel&Deitel :
bon, c'est de la théorie, sachant que presque tous utilisent
les fonctionnalité du C en C++. Mais c'était le sens de mon
intervention.
Pour obtenir une bonne pratique de programmation par
défaut je pose le postulat suivant :
Les crochets ( < et > ) = Librairie std C++ [ !=(*.h) ]
Les guillemets = Fichier du programmeur [ !=(<>) ]
je repère ainsi facilement les librairies C, mais je ne suis pas sous Linux !
@+
Lupin
en fait je comprends un peu ta rèticence !
mais je crois aussi que ce sont des traces du C !
voici le texte de Deitel&Deitel :
17.2 Directive de précompilation #include La directive de précompilation #include, que vous trouverez partout dans ce texte, provoque l'insertion d'une copie d'un fichier spécifié à la place de la directive. Les deux formes d'include sont #include <nomfichier> #include "nomfichier" La différence entre elles réside dans l'emplacement ou le précompilateur recherche le fichier à inclure. Si le nom de fichier est entouré de crochets ( < et > ), ce qui prévaut pour les fichiers d'en-tête de la bibliothèque standard, le précompilateur recherche le fichier indiqué d'une façon qui dépend de l'implantation, normalement dans des répertoires prédéfinis. Si le nom de fichier est entouré de guillemets, le précompilateur débute la recherche dans le même que le fichier compilé, puis la poursuit de la même façon que pour les fichiers entourés entourés de crochets. Cette méthode est normalement utilisée pour inclure des fichiers d'en-tête définis par le programmeur.
bon, c'est de la théorie, sachant que presque tous utilisent
les fonctionnalité du C en C++. Mais c'était le sens de mon
intervention.
Pour obtenir une bonne pratique de programmation par
défaut je pose le postulat suivant :
Les crochets ( < et > ) = Librairie std C++ [ !=(*.h) ]
Les guillemets = Fichier du programmeur [ !=(<>) ]
je repère ainsi facilement les librairies C, mais je ne suis pas sous Linux !
@+
Lupin