4

定数定義を含む C++ のファイルがあり、C# プロジェクトで同じ定義を使用したいと考えています。両方のプロジェクトはより大きなプロジェクトの一部であるため、C++ ファイルに変更 (追加/削除) がある場合は、対応する C# ファイルにも反映される必要があります。2 つのファイルの同期を維持したい。これを行うためのスクリプト/ツールがあるかどうか疑問に思っていました。

逆の解決策 (C#-->C++) も機能します。

説明:

現在、コードは次のとおりです。

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

ここで、C++ での変更が C# に反映されるように (またはその他の方法で)、1 つのファイルを作成して、これらの定数のプロジェクト全体で 1 つのファイルを作成したいと考えています。

ご覧のとおり、C++ の構造体で定義された一連の定数を C# の列挙型にマップしたいと考えています。上記の構造に (両方のプロジェクトで) 依存する他のコードがあるため、上記の予想される定義に変更を加えない/最小限にしたい (ただし、現在の形式でこれを達成する良い方法がない場合は、変更する可能性があります)。

4

5 に答える 5

4

定数ファイルを取得して、App.Constants.dllのようなアセンブリとして個別にパッケージ化し、C#プロジェクトとC ++プロジェクトの両方にそれらを参照させてみませんか?このようにして、1か所で変更を加えることができます。Visual Studioで簡単に使用できるように、プロジェクトベースの参照を用意します。

于 2009-07-30T21:42:16.247 に答える
1

単純な整数定数などを想定すると、プリプロセッサを工夫することで同じソース ファイルを再利用できるはずです。このようなもの:

#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

名前が一致するように、一部の型の typedef が必要になる場合があります (例: typedef unsigned int uint)。

次に、コードを で C# プロジェクトの一部としてコンパイルし/define:CSHARP#include追加の定義なしで C++ ヘッダーにコンパイルします。

于 2009-07-30T22:03:42.570 に答える
1

おそらくスクリプトが見つからないでしょう...これを行うには、独自のスクリプトが必要です。それ以外の場合は、マクロが最適です...
スクリプトがある場合は、プロジェクトをビルドするたびにこのスクリプトを自動的に実行するルールをメイクファイルに作成できます。

于 2009-07-30T22:56:42.197 に答える
1

実行したいことは、アンマネージ C++ と C# の両方で再利用可能な形式で定数と列挙型を含むマネージ C++ ライブラリを作成することです。

管理対象バージョン:

//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.cpp
#define MAKECONST(name, value) const int ##name = ##value;

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

#include "const.h"

実際の列挙型の定義:

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

consts ファイル:

//consts.h
MAKECONST(NumFruitInABowl, 3)
MAKECONST(NumBowls, 2)
于 2009-07-30T23:10:18.457 に答える
0

これを行う自動化された方法は、SWIGを使用して C++ コードを C# に変換することです。

于 2009-07-30T23:20:54.503 に答える