3

数十の C 構造体があり、それらを C# で使用する必要があります。典型的な C 構造体は次のようになります。

typedef struct _UM_EVENT
{
   ULONG32 Id;
   ULONG32 Orgin;          
   ULONG32 OperationType;  
   ULONG32 Size;           
   LARGE_INTEGER Time;     
   HANDLE ProcessId;
   HANDLE ThreadId;
} UM_EVENT, *PUM_EVENT;

この構造を C# で使用するには、C# で宣言してからマーシャリングを行います。これは、大まかに次の方法で行うことができます。

public struct UM_EVENT
{
   public UInt32 Id;             
   public UInt32 Orgin;          
   public UInt32 OperationType;  
   public UInt32 Size;           
   public UInt64 Time;           
   public IntPtr ProcessId;      
   public IntPtr ThreadId;       
}

private void Load(IntPtr event) {

   unsafe
   {
       UM_EVENT header = *(UM_EVENT*)event;
   }
}

IMHO、コードが何度も書かれている場合、このアプローチには次の欠点があります。

  1. コーディングは速くなく、あまり考える必要はありません
  2. コードには、長期間検出されないままになる可能性のある多くのバグが含まれている可能性があります
  3. C 構造の変更には C# 構造の同じ変更が必要なため、コードの保守性はあまり高くありません。

それで、与えられた C 構造から提示された C# コードを自動的に生成するユーティリティを知っている人はいますか? それとも、C# で多数の C 構造体を快適に使用するまったく別の方法がありますか?

4

0 に答える 0