.tt ファイルを使用して .h を処理し、それを .cs ファイルに変換することを検討します。これは非常に簡単で、ソース ファイルは C# ソリューションの一部になり (つまり、.h ファイルが変更されると更新されます)、クリックしてエディターで開くことができます。
#define が 1 つしかない場合は少しやり過ぎかもしれませんが、それらでいっぱいのファイル (たとえば、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]#>";
<#
}
}
} #>
}
}