문제

C ++에 상수 정의가 포함 된 파일이 있으며 C# 프로젝트에서 동일한 정의를 사용하고 싶습니다. 두 프로젝트 모두 더 큰 프로젝트의 일부이므로 C ++ 파일에 변경 (추가/삭제)이 있으면 해당 C# 파일에도 반영되어야합니다. 두 파일을 동기화하고 싶습니다. 이 작업을 수행 할 대본/도구가 있는지 궁금합니다.

리버스 솔루션 (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# (또는 다른 방법)에 반영되도록 단일 파일을 갖고 싶습니다.

보시다시피, C ++의 구조물에 정의 된 상수를 C#의 열거에 매핑하고 싶습니다. 위의 구조에 대한 다른 코드 의존적 (두 프로젝트 모두)이 있기 때문에 위의 예상 정의에서 변경 사항이 없거나 최소화되고 싶습니다 (그러나 현재 형식으로이를 달성하는 좋은 방법이 없다면).

도움이 되었습니까?

해결책

당신은 아마 스크립트를 찾지 못할 것입니다 ... 당신은 이것을하기 위해 자신의 대본이 있어야합니다. 그렇지 않으면 매크로가 가장 적합합니다 ...
스크립트가있는 경우 MakeFile에서 프로젝트를 구축 할 때마다 자동 으로이 스크립트를 실행하는 규칙을 작성할 수 있습니다.

다른 팁

상수 파일을 가져 와서 App.Constants.dll과 같은 어셈블리로 별도로 패키지하고 C# 및 C ++ 프로젝트를 참조하십시오. 이런 식으로, 당신은 한 곳에서 변화를 만들 수 있습니다. Visual Studio에서 쉽게 만들 수 있도록 프로젝트 기반 참조를 가지고 있습니다.

일반 정수 상수 및 그러한 상수를 가정하면 전처리기를 창의적으로 사용하여 동일한 소스 파일을 재사용 할 수 있어야합니다. 이 같은:

#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

이름이 일치하도록 일부 유형에 대해 typedefs가 필요할 수 있습니다 (예 : typedef unsigned int uint).

그런 다음 C# 프로젝트의 일부로 코드를 컴파일합니다. /define:CSHARP, 그리고 또한 #include 추가 정의가없는 일부 C ++ 헤더로 들어갑니다.

당신이하고 싶은 것은 관리되지 않은 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)

이 작업을 수행하는 자동화 된 방법 통음 C ++ 코드를 C#로 변환합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top