2010-01-18 15 views
2

Salutations, Je suis désolé pour la peine, je vais vous montrer la question:Export C++ fonctions à l'intérieur d'un C# application

Je suis en train d'exporter certaines fonctions écrites en C++ dans une DLL afin de les importer dans un Application C# s'exécutant sur Visual Studio. Je fais l'exportation comme indiqué dans le code suivant,

tobeexported.h:

namespace SOMENAMESPACE 
{ 
       class __declspec(dllexport) SOMECLASS 
       { 
           public: 
           SOMETYPE func(param A,char b[tot]); 

       }; 
} 

tobeexported.cpp:

#include "stdafx.h" 
#include "tobeexported.h" 
... 


using namespace SOMENAMESPACE; 

SOMETYPE SOMECLASS:: func(param A,char b[tot]) 
       { 
           ...some stuff inside... 
       } 

Le dll est righly créé et le code est déjà CLR- géré (regardé avec un logiciel de démontage (réflecteur)) et contient les fonctions exportées puis je "Ajouter la référence" dans mon application C# et la DLL est trouvée, mais quand je l'ouvre avec le navigateur d'objet il est complètement vide, ni classe, ni objet a été exporté et prêt à être utilisé

pouvez-vous m'aider s'il vous plaît? merci meilleures salutations

Répondre

3

Qu'en est-il de l'utilisation de C++ géré pour compiler votre DLL? Il vous suffit d'ajouter un arbitre à la classe comme ceci:

namespace SOMENAMESPACE 
{ 
       public ref class SOMECLASS 
       { 
           public: 
           SOMETYPE func(param A,char b[tot]); 

       }; 
} 

Après la compilation réussie et le référencement dans l'autre projet, la classe doit être visible. Exportation natif C++ est pas vraiment portable, chaque compilateur produit des résultats différents et est fastidieux de se lier à l'intérieur C# ...

EDIT: ajout modificateur d'accès public à la classe ... ref

+0

Merci pour la réponse, je suis en utilisant C++ géré (dans Visual Studio le projet qui contient le code C++ est une "bibliothèque de classes") mais même avec la commande "ref" au lieu d'exporter cela fonctionne, le résultat donné est complètement le même. [L'opération d'importation est possible même si j'ai importé précédemment une DLL C++; J'ai créé mon nouveau dll vraiment similaire à celui qui fonctionne mais rien de bon n'arrive ^^] Merci encore – Ricibald

+0

Oh désolé, j'ai oublié de vous dire d'ajouter aussi public, 'public ref class ...'. J'espère alors que cela fonctionnera bien. Dans le réflecteur .NET la visibilité est probablement privée ou interne ai-je raison? – jdehaan

+0

ça marche! Merci! – Ricibald