我有这样的结构:C#改变字段的顺序在一个结构
public struct SERVER_DF_PARAMETERS
{
public bool bRunState;
public bool bWideband;
public double dFrequencyRF;
public double dFrequencyStartScan;
public double dFrequencyStopScan;
public double dBandwidthIF;
public double dBandwidthDF;
public bool bNormalModeDF;
public double dThresholdLevelDF;
public double dThresholdQualityDF;
public int iAverageTimeDF;
public bool bPreAmplifierRF;
public bool bLongAntennaRF;
public int iTunerModeRF;
public int iGainRF;
public bool bAutoGainIF;
public int iManualGainIF;
public int iAutoGainCtrlTime;
public double dMaxGainAgc;
public bool bAFC;
public bool bVoiceState; //true -> On , false -> off
public bool bSquelchState; //true -> On , false -> off
public bool bStateDenoising; //true -> On , false -> off
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
public String strDemodulation; //AM,FM,SSB,CW,...
public double dBandwidthVoice; //in KHz
public int iBeatFreqOffset; //in Hz (BFO)
public double dGainVoice; //int dBm
public bool bClassifier; //true -> Run , false -> Stop
public int iTimeHistoryCL; //in millisecond
};
但是当程序运行字段的顺序改变这种(所有布尔值都在上面等):
(I added to watch to see its value)
bAFC false bool
bAutoGainIF false bool
bClassifier false bool
bLongAntennaRF false bool
bNormalModeDF true bool
bPreAmplifierRF false bool
bRunState true bool
bSquelchState false bool
bStateDenoising false bool
bVoiceState false bool
bWideband false bool
dBandwidthDF 20.0 double
dBandwidthIF 20.0 double
dBandwidthVoice 100.0 double
dFrequencyRF 100.0 double
dFrequencyStartScan 100.0 double
dFrequencyStopScan 200.0 double
dGainVoice 1.0 double
dMaxGainAgc -30.0 double
dThresholdLevelDF -130.0 double
dThresholdQualityDF 50.0 double
iAutoGainCtrlTime 1000 int
iAverageTimeDF 1000 int
iBeatFreqOffset 0 int
iGainRF 0 int
iManualGainIF 0 int
iTimeHistoryCL 1000 int
iTunerModeRF 0 int
strDemodulation "FM" string
的问题是,当我想用插座,并发送这个结构的服务器和服务器在C++中并给出了这个结构的字节。所以领域的顺序不应该改变。
你尝试过在你的结构的减速'[StructLayout(LayoutKind.Sequential)]'属性? – Zafar
你确定内存中*字段的顺序正在改变吗?调试检查器只是在字段名称列出时进行字母排序。 –
@Zafar:是的,我把它忘了,但是我忘记了(Pack = 1)。[StructLayout(LayoutKind.Sequential,Pack = 1)]效果很好 – Fateme