私はstruct
そのように持っています
public struct InstrumentDefinition2
{
public int instrumentId;
public int Decimals;
public long MinPriceIncrement_Mantissa;
public short MinPriceIncrement_Exponent;
public long RoundLot_Mantissa;
public short RoundLot_Exponent;
public char MsgType; // 'd' - Security Definition 'f' - Security Status?
}
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
public delegate void InstrumentReplayCallback(ref InstrumentDefinition2 value);
デリゲート呼び出しを介して、この c++ 構造体から構築されます。
typedef struct _InstrumentDefinition {
int32_t instrumentId;
int32_t Decimals;
int64_t MinPriceIncrement_Mantissa;
int16_t MinPriceIncrement_Exponent;
int64_t RoundLot_Mantissa;
int16_t RoundLot_Exponent;
char MsgType; // 'd' - Security Definition 'f' - Security Status
} InstrumentDefinition;
それは正常に動作します。InstrumentDefinition2 を として宣言できるかどうかわかりませんclass
。InstrumentDefinition2
しかし、私はとして宣言するのが好きstruct
で、「メモリの c++ ブロックへのポインタ」について考えています。
しかし、処理中にクラスにコピーする必要があります。だから私は非常によく似たC#
クラスを宣言したい:
public class InstrumentDefinition
{
public int instrumentId;
public int Decimals;
public long MinPriceIncrement_Mantissa;
public short MinPriceIncrement_Exponent;
public long RoundLot_Mantissa;
public short RoundLot_Exponent;
public char MsgType; // 'd' - Security Definition 'f' - Security Status?
}
InstrumentDefinition2
問題は、構造体をInstrumentDefinition
クラスにコピーするにはどうすればよいですか? もちろん、すべてのフィールドを 1 つずつ割り当てることができますが、次のようになります。
- 比較的遅いと思います
- エラーが発生しやすい (新しいフィールドが導入され、その「対処」を追加するのを忘れた場合はどうなりますか?)
では、すべてのフィールドに対処することなく、どうにかしてそれを行うことができますか?