Frage

Ich habe eine Datei in C ++ enthält konstante Definitionen, ich die gleichen Definitionen in einem C # Projekt verwenden möge. Da beide Projekte Teil eines größeren Projekts sind, möchte ich, wenn es eine Änderung (Hinzufügen / Löschen) in der C ++ es C # Datei in entsprechenden bekommen reflektiert Datei sollte. Ich mag die 2 Dateien synchron halten. Ich frage mich, ob es ein Skript / Werkzeug ist, dies zu tun.

Eine umgekehrte Lösung (C # -> C ++) würde auch funktionieren

.

Zur Verdeutlichung:

Zur Zeit ist der Code:

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

Jetzt möchte ich eine einzelne Datei haben, so dass Änderungen in C ++ in C # reflektiert werden (oder umgekehrt), so dass ich eine einzelne Datei über die Projekte für diese Konstanten haben.

Wie Sie sehen, ich will Bündel von Konstanten in einer Struktur in C definiert abzubilden ++ zu einem Enum in C #. Ich mag keine / minimale Änderungen in oben erwartet Definitionen machen, wie es andere Codes abhängig ist (in beiden Projekten) auf den obigen Strukturen (aber könnte es tun, wenn es nicht ein guter Weg, dies im aktuellen Format erreichen)

War es hilfreich?

Lösung

Sie wahrscheinlich nicht ein Skript finden ... Sie sollten Ihr eigenes Skript haben, dies zu tun. Ansonsten MACROs sind die beste Lösung ...
Wenn Sie ein Skript haben, dann können Sie eine Regel in Ihrem Make-Datei erstellen, die automatisch das Skript wird ausgeführt, wenn Sie Ihr Projekt erstellen.

Andere Tipps

Warum nicht nehmen Sie die Konstanten-Datei und verpacken sie separat als Montage etwas wie App.Constants.dll und haben beide C # und C ++ Projekte auf sie verweisen? Auf diese Weise können Sie Änderung an einem Ort machen. Haben Referenzen Projekt in Visual Studio, um es einfach.

Ebene ganzzahlige Konstanten und solche Unter der Annahme, sollte es möglich sein, die gleiche Quelldatei kreativ unter Verwendung von Präprozessor wiederzuverwenden. So etwas wie folgt aus:

#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

Sie müssen möglicherweise typedefs für einige Arten, so dass ihre Namen übereinstimmen (z typedef unsigned int uint).

Dann kompilieren Sie Code als Teil Ihrer C # Projekt mit /define:CSHARP, und es auch ohne zusätzliche definiert in einigen C ++ Header #include.

Was Sie tun möchten, ist eine verwaltete C ++ Bibliothek zu erstellen, die die Konstanten und Aufzählungen in einem Format enthält, die sowohl wiederverwendbar in nicht verwalteten C ++ und C #.

Managed Version:

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

Unmanaged Version:

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

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

#include "const.h"

Die tatsächlichen Enum-Definitionen:

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

Die consts-Datei:

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

Ein automatisiertes Verfahren dafür, es zu tun verwenden SWIG C ++ Code in C # zu konvertieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top