2010-07-09 5 views
0

J'ai compilé un projet C++ natif en utilisant le commutateur/CLR ("gloox", une bibliothèque XMPP). La construction a réussi et je suis capable de le référencer à partir d'un projet C# (c'est-à-dire qu'il apparaît dans le dossier Références). Le projet C++ expose certaines classes sous l'espace de noms 'gloox'.Problème référençant le projet C++/clr du C#

Je peux aussi voir l'espace de noms gloox {} dans le navigateur d'objets, ainsi que toutes les classes exportées. Le problème est que depuis le projet C# je ne peux pas "voir" l'espace de noms de gloox (ie 'using gloox' ne compile pas).

Merci

+0

Si vous regardez dans le navigateur d'objets dans Visual Studio, pouvez-vous voir tous les types exportés par le projet gloox? Cela devrait vous dire ce qu'est l'espace de noms complet. –

+0

Merci Sam. Oui, je peux voir l'espace de noms gloox {} dans l'OB. (Question principale éditée) –

Répondre

2

Le projet C++ exposent tous les types gérés (ref class ou value class ou enum class)? L'option /CLR ne rend pas par magie les types disponibles au code managé, vous avez besoin des métadonnées gérées qui sont uniquement disponibles pour les types gérés, et les types doivent être publics pour être utilisés à partir d'autres assemblys. Pour être totalement précis, le compilateur C++/CLI crée parfois des métadonnées pour les classes natives, en particulier en mode /clr:pure, mais les marque comme internes de sorte que vous ne pouvez pas les utiliser depuis d'autres langages qui ne comprennent pas le C++ natif. règles.)

+0

Je crois que Ben a la bonne réponse ici. La distribution officielle de gloox est un code C++ standard, et n'utilise pas la syntaxe C++/CLI pour déclarer les types gérés. Construire simplement avec/clr ne rendra pas les types C++ standard "visibles" à C# ou à d'autres langages compatibles CLS. Vous pouvez ajouter des classes "wrapper" gérées à gloox qui appellent les classes gloox non managées et les données de mars et d'avant. L'avantage de/clr est qu'il peut rendre ce type de wrapping plus transparent que d'utiliser un tas de DllImport. –

Questions connexes