PBM d'inportation d'un DLL C++ dans Visual DOTNET - C++ - Programmation
Marsh Posté le 10-05-2005 à 14:44:27
dllimport, p/invoke tout ça...
Marsh Posté le 10-05-2005 à 14:58:28
Harkonnen a écrit : dllimport, p/invoke tout ça... |
merci harkonen
ou dois-je ecrire ce mot cle : dllimport ? ca fait depuis deux mois ke je code sur VB .NET.
jaimerai que vous m'aidiez un peu plus.
merci
Marsh Posté le 10-05-2005 à 15:02:43
Citation : ca fait depuis deux mois ke je code sur VB .NET |
Citation : jaimerai que vous m'aidiez un peu plus. |
Tu veux pas 100 balles et un mars non plus...
http://www.google.fr/search?hl=fr& [...] %3Dlang_fr
Marsh Posté le 10-05-2005 à 15:19:00
cesarr89 a écrit :
|
merci de ton aide Mr JULES CESAR.
Wè mais cet DLL est composé de classes, et moi je voudrais savoir comment je pourrai instancier une classe de cet DLL.
Merci d'avance
Marsh Posté le 10-05-2005 à 15:25:37
ReplyMarsh Posté le 10-05-2005 à 15:46:01
C'est du VB.Net ?
Si oui il faut coder ton projet en Managed C++, et ensuite tu pourras utiliser ton assembly sans soucy depuis VB ou C# ou autre.
Marsh Posté le 10-05-2005 à 16:55:37
Encore merci MR JULES CESAR.
Voici un petit code que j'ai fait pour tester le le guide que tu m'a passé.
Dim monAssembly As System.Reflection.Assembly = System.Reflection.Assembly.LoadFrom("C:\Documents and Settings\adirieh\Mes documents\AFIS\AFISprojet\AFISprojet\obj\Debug\moduleDBA_DBR.dll" )
' Nom de l'objet à créer
Dim myClassName As String = "DBAdata"
Dim MonType As Type
For Each MonType In monAssembly.GetTypes()
If m_sClassName = MonType.Name Then
' Un type correspond, création d'un objet
Dim data = CType(Activator.CreateInstance(MonType),[#ff3800 SI JE MET LA CLASSE QUE JE CHERCHE, IL DIT QUE CET OBJECT N'EST PAS DECLARE [/#ff3800])
End If
Next
T'as une idée sur ça ?
merci
Marsh Posté le 10-05-2005 à 19:08:31
Si c'est du C++ Natif c'est normal. La reflexion n'est pas utile dans ton cas. Tu ajoutes ton assembly comme référence et ça marche tout seul. Sauf que toi t'as pas une assembly mais une dll native. => Voir Managed C++...
Marsh Posté le 11-05-2005 à 14:07:30
HelloWorld a écrit : Si c'est du C++ Natif c'est normal. La reflexion n'est pas utile dans ton cas. Tu ajoutes ton assembly comme référence et ça marche tout seul. Sauf que toi t'as pas une assembly mais une dll native. => Voir Managed C++... |
Merci pour le conseil, j'ai donc décidé de faire une couche C++ managed qui encapsule ma bibliothèque de classes C++ standard.
Cependant ayant effectué ceci et que le code est lesuivant, jai eu une erreur d'ambiguite IServicePRovider
:
[.H]
namespace A
{
public __gc class wDBA
{
private:
DBAdata* _data;
public :
wDBA(){
_data = new DBAdata();
}
~wDBA(){}
static void OpenConnexion(const string& user, const string& pass, const string& name) ;
static void CloseConnexion();
};
}
[.CPP]
#include "wModuleDBA_DBR.h"
void wDBA::OpenConnexion(const string& user, const string& pass, const string& name){
_data. m_connexion.OpenSession(user,pass,name);
cout<<"OK OPEN CONNEXION DB"<<endl;
}
void wDBA::CloseConnexion() {
_data->m_connexion.CloseSession();
cout<<"OK CLOSE CONNEXION DB"<<endl;
}
Marsh Posté le 11-05-2005 à 15:26:40
C'est dur comme ça. Utilise la balise [ cpp ].
Et donne l'erreur exacte + la ligne.
Tu vas avoir un problème avec string aussi. Faut utilise des types .Net, à savoir String*.
Ta classe MC++ doit juste encapsuler ta classe native. Elle se contente d'appeler les même fonctions, sauf qu'elle "marshall" = converti les types .Net <-> Natif (dans le cas de std::string par exemple).
Marsh Posté le 11-05-2005 à 15:38:09
HelloWorld a écrit : C'est dur comme ça. Utilise la balise [ cpp ]. |
Voici l'erreur qui s'affcihe :
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\ServProv.h(93) : error C2872: 'IServiceProvider' : symbole ambigu est peut-être 'c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\ServProv.h(48) : System::IServiceProvider IServiceProvider'
ou 'wModuleDBA_DBR.cpp(0) : System::IServiceProvider'
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\ServProv.h(100) : fatal error C1903: impossible de récupérer à partir des erreurs précédentes ; arrêt de la compilation
Marsh Posté le 11-05-2005 à 15:51:03
Tu t'en sers où ?
A quoi il sert _data ? Pourquoi tes fonctions sont statiques ?
Essaye de ne rien inclure dans ton .h. Regarde comment fonctionne la technique du pimpl.
Marsh Posté le 11-05-2005 à 16:12:19
HelloWorld a écrit : Tu t'en sers où ? |
Excuse moi , c'est vrai que je ne t'ai de pas sans un petit commentaire de ce que je fais.
En faite ,_data sera une instanciation d'une classe de ma bibliothèque C++ natif.
ben des collègues m'ont dit que les méthodes qui vont encapsuler d'autres méthodes de ma bibliothèque C++ natif doivent ê static
Cependant, j'ai tout modifié mais j'ai toujours les memes erreurs
my file .h
namespace wModuleDBA_DBR
{
public __gc class wDBA
{
private:
DBAdata *_data;
public :
wDBA(){
_data = new DBAdata();
}
~wDBA(){}
static void OpenConnexion(const string& user, const string& pass, const string& name) ;
static void CloseConnexion();
};
}
my file .cpp
#include "wModuleDBA_DBR.h"
#include <stdio.h>
#include "DBAaccess.h"
#include <exception>
namespace wModuleDBA_DBR {
void wDBA::OpenConnexion(const string& user, const string& pass, const string& name){
_data. m_connexion.OpenSession(&user,&pass,&name);
cout<<"OK OPEN CONNEXION DB"<<endl;
}
void wDBA::CloseConnexion() {
_data->m_connexion.CloseSession();
cout<<"OK CLOSE CONNEXION DB"<<endl;
}
}
Et voici les erreurs qui sortent :
c:\Documents and Settings\adirieh\Mes documents\AFIS\AFISprojet\wModuleDBA_DBR\wModuleDBA_DBR.h(18) : error C2143: erreur de syntaxe : absence de ';' avant '*'
c:\Documents and Settings\adirieh\Mes documents\AFIS\AFISprojet\wModuleDBA_DBR\wModuleDBA_DBR.h(18) : error C2501: 'wModuleDBA_DBR::wDBA::DBAdata' : Spécificateurs de type ou de classe de stockage manquants
c:\Documents and Settings\adirieh\Mes documents\AFIS\AFISprojet\wModuleDBA_DBR\wModuleDBA_DBR.h(18) : error C2501: 'wModuleDBA_DBR::wDBA::_data' : Spécificateurs de type ou de classe de stockage manquants
c:\Documents and Settings\adirieh\Mes documents\AFIS\AFISprojet\wModuleDBA_DBR\wModuleDBA_DBR.h(27) : error C2143: erreur de syntaxe : absence de ',' avant '&'
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\ServProv.h(48) : warning C4935: spécificateur d'accès à l'assembly modifié à partir de 'public'
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\ServProv.h(93) : error C2872: 'IServiceProvider' : symbole ambigu
est peut-être 'c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\ServProv.h(48) : System::IServiceProvider IServiceProvider'
ou 'wModuleDBA_DBR.cpp(0) : System::IServiceProvider'
Merci d'avance de ton aide
Marsh Posté le 11-05-2005 à 16:23:51
HelloWorld a écrit : C'est dur comme ça. Utilise la balise [ cpp ]. |
Marsh Posté le 10-05-2005 à 14:38:51
Bonjour
J'utilise Visual .NET comme logicile de développement, mon problème est que je ne peut importer ma DLL C++ pour l'utiliser dans mon projet VB ?
J'aimerai que vous m'aidiez, je suis bloqué sur cette importation.
Par ailleurs, est-ce qu'il y a une solutino en passant par C# ?
Merci