私は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 つずつ割り当てることができますが、次のようになります。
- 比較的遅いと思います
- エラーが発生しやすい (新しいフィールドが導入され、その「対処」を追加するのを忘れた場合はどうなりますか?)
では、すべてのフィールドに対処することなく、どうにかしてそれを行うことができますか?