PBM d'inportation d'un DLL C++ dans Visual DOTNET

PBM d'inportation d'un DLL C++ dans Visual DOTNET - C++ - Programmation

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

Reply

Marsh Posté le 10-05-2005 à 14:38:51   

Reply

Marsh Posté le 10-05-2005 à 14:44:27    

dllimport, p/invoke tout ça...


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

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

Reply

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

Reply

Marsh Posté le 10-05-2005 à 15:19:00    

cesarr89 a écrit :

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


 
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

Reply

Marsh Posté le 10-05-2005 à 15:25:37    

Reply

Marsh 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.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

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

Reply

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


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

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;
 
 
}
 

Reply

Marsh Posté le 11-05-2005 à 14:07:30   

Reply

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).


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 11-05-2005 à 15:38:09    

HelloWorld a écrit :

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).


 
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

Reply

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.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 11-05-2005 à 16:12:19    

HelloWorld a écrit :

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.


 
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

Reply

Marsh Posté le 11-05-2005 à 16:23:51    

HelloWorld a écrit :

C'est dur comme ça. Utilise la balise [ cpp ].



---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed