Question

J'ai un fichier en C ++ contenant des définitions constantes, je veux utiliser les mêmes définitions dans un projet C #. Étant donné que les deux projets font partie d'un projet plus important, je souhaite que tout changement (ajout / suppression) dans le fichier C ++ soit répercuté dans le fichier C # correspondant. Je veux garder les 2 fichiers synchronisés. Je me demandais s’il existait un script ou un outil pour le faire.

Une solution inverse (C # - & C ++) fonctionnerait également.

Clarification:

Actuellement, le code est le suivant:

//C++ 
    struct Colors{ 
         static const int Red = 100; //Custom Values are important 
         static const int Green = 101; } 
//C#

public enum Color{ Red = 100; Green =101; }

Je souhaite maintenant avoir un fichier unique pour que toutes les modifications apportées à C ++ soient reflétées dans C # (ou autrement) afin que je puisse avoir un fichier unique dans les projets pour ces constantes.

Comme vous le voyez, je veux mapper un groupe de constantes définies dans une structure en C ++ avec une énumération en C #. Je souhaite ne modifier que peu les définitions attendues ci-dessus, car il existe un autre code dépendant (dans les deux projets) des structures ci-dessus (mais peut le faire, s'il n'y a pas de bonne manière de réaliser cela dans le format actuel)

Était-ce utile?

La solution

Vous ne trouverez probablement pas de script ... Vous devriez avoir votre propre script pour le faire. Sinon, les MACRO sont la meilleure solution ...
Si vous avez un script, vous pouvez créer une règle dans votre fichier makefile qui l'exécutera automatiquement chaque fois que vous construirez votre projet.

Autres conseils

Pourquoi ne prenez-vous pas le fichier de constantes et ne le mettez-vous pas sous forme d'assembly, comme App.Constants.dll, et que les projets C # et c ++ les référencent? De cette façon, vous pouvez faire des changements en un seul endroit. Disposez de références basées sur des projets pour faciliter la tâche dans Visual Studio.

En supposant des constantes entières simples et autres, il devrait être possible de réutiliser le même fichier source en utilisant le préprocesseur de manière créative. Quelque chose comme ça:

#if CSHARP
public class Constants {
#else
#  define public
#endif

// Easy stuff
public const int FOO = 1;
public const int BAR = 2;

// Enums can be done too, but you have to handle the comma
public enum Color { COLOR_RED, COLOR_GREEN, COLOR_BLUE }
#if !CSHARP
;
#endif

#if CSHARP
}
#else
#  undef public
#endif

Vous aurez peut-être besoin de typedefs pour certains types afin que leurs noms correspondent (par exemple, typedef unsigned int uint ).

Ensuite, vous compilez le code dans votre projet C # avec / define: CSHARP , ainsi que #include dans un en-tête C ++ sans définition supplémentaire.

Vous souhaitez créer une bibliothèque C ++ gérée contenant les constantes et les énumérations dans un format réutilisable en C ++ non géré et en C #.

Version gérée:

//managed.cpp
#define MAKECONST(name, value) public const int ##name = ##value; 

public enum class FruitType
{
    #include "FruitType.h"
};

pubilc ref class Constants {
   #include "const.h"
};

Version non gérée:

//unmanaged.cpp
#define MAKECONST(name, value) const int ##name = ##value;

enum FruitType
{
    #include "FruitType.h"
};

#include "const.h"

Les définitions d'énumération réelles:

//FruitType.h
Apple = 1,
Banana,
Lychee

Le fichier consts:

//consts.h
MAKECONST(NumFruitInABowl, 3)
MAKECONST(NumBowls, 2)

Une méthode automatisée consiste à utiliser SWIG pour convertir votre code C ++ en C #.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top