Я хотел бы рассмотреть возможность использования файла .tt для обработки .h и превращения его в файл .cs. Это очень просто, и исходные файлы станут частью вашего решения на C # (то есть они будут обновляться при изменении файла .h), их можно щелкнуть, чтобы открыть в редакторе и т. Д.
Если у вас есть только 1 #define, это может быть немного излишним, но если у вас есть полный файл (например, файл mfc resource.h), тогда это решение становится большим выигрышем.
Например: создайте файл DefineConverter.tt и добавьте его в свой проект, измените отмеченную строку, чтобы она ссылалась на ваш файл .h, и вы получите новый класс в своем проекте, полный статических записей const. (обратите внимание, что входной файл относится к файлу вашего проекта, установите hostspecific = false, если вы хотите абсолютные пути).
<#@ template language="C#v3.5" hostspecific="True" debug="True" #>
<#@ output extension="cs" #>
<#@ assembly name="System.Core.dll" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.IO" #>
<#
string input_file = this.Host.ResolvePath("resource.h"); <---- change this
StreamReader defines = new StreamReader(input_file);
#>
//------------------------------------------------------------------------------
// This code was generated by template for T4
// Generated at <#=DateTime.Now#>
//------------------------------------------------------------------------------
namespace Constants
{
public class <#=System.IO.Path.GetFileNameWithoutExtension(input_file)#>
{
<#
// constants definitions
while (defines.Peek() >= 0)
{
string def = defines.ReadLine();
string[] parts;
if (def.Length > 3 && def.StartsWith("#define"))
{
parts = def.Split(null as char[], StringSplitOptions.RemoveEmptyEntries);
try {
Int32 numval = Convert.ToInt32(parts[2]);
#>
public static const int <#=parts[1]#> = <#=parts[2]#>;
<#
}
catch (FormatException e) {
#>
public static const string <#=parts[1]#> = "<#=parts[2]#>";
<#
}
}
} #>
}
}