0
votes

C # Utilisation de Enum déclarée dans la bibliothèque C ++

J'ai une bibliothèque C ++ avec une déclaration d'énorme, cette bibliothèque est utilisée par une application C #. Je veux utiliser cet énum sur le côté C mais ça ne marche pas. Si j'appuie sur F12 sur ProfileType (Aller à la définition), il ouvre un fichier 'du fichier de métadonnées' avec: xxx

qui a l'air assez vide.

dans le fichier d'en-tête C ++ déclaré comme: xxx

J'ai essayé juste profiletypeCross ou profileType.ProfileTypecross, mais j'ai toujours une erreur de compilateur: xxx

Y a-t-il un moyen de le faire?


4 commentaires

C ++ utilise C ++ Enums. C # utilise c # Enums. Ils ne sont pas entièrement compatibles, syntaxiquement ou sémantiquement.


Cela signifie donc que vous ne pouvez pas le faire? Et si non possible, quelle est la solution la plus élégante? Pour le moment, je fais: "(ProfileType) 2" et le compilateur est heureux.


Vous trouverez peut-être cette ...


De MS Doc: Dans les types d'origine C et C ++ d'origine, les énumérateurs non qualifiés sont visibles tout au long de la portée dans laquelle l'énumé est déclarée. Dans Scoped Enums, le nom de l'énumérateur doit être qualifié par le nom de type ENum. C # a besoin d'énumérums encadrés.


3 Réponses :


0
votes

J'ai fini par utiliser cette solution qui fonctionne:

/// @remarks C++ enums are incompatible with C# so you need to go and check the corresponding C++ header file :-|
if (profileType == (ProfileType)0)
{


0 commentaires

0
votes

C ++ Enums sont de 32 bits larges afin que vous puissiez déclarer le Enum à nouveau en C # et l'utiliser à partir de là.

sur le côté C ++ < Pré> xxx

sur le côté C # xxx

d'ici, nous pouvons prélever la valeur directement sur le type Enum . < / p>


3 commentaires

C # est déjà "voir" le profileType Enum, donc j'aurai probablement une erreur de compilateur si j'utilise le même nom Enum, non? Je suis en vacances maintenant mais je vais l'essayer plus tard juste pour vérifier.


Basé sur l'erreur fournie, votre application C # ne voit pas l'énum d'origine, il ne faut donc pas vous donner des erreurs.


Cela ne voit aucune des valeurs ProfileTyPross, etc. mais cela voit le profileType. C'est pourquoi la solution que j'ai proposée fonctionne.