-2
由於value-type
成員和reference-type
成員在工會內部結構的混合,我將一個本機win 32代碼編組爲c#,因此我將所有引用類型轉換爲字節並解決了大小問題他們通過使用fielOffset
..現在我想訪問這些成員之一的價值,我不知道如何去做。下面的代碼是樣本。從非託管內存中的字節讀取字符陣列
這裏是C++結構
typedef struct
{
int Port;
char SubsId[FIELD_SIZE_SUBS_ID+1];
char Options[FIELD_SIZE_OPTIONS+1];
} MMTPRcnxReq;
這裏是C#相當於
[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Ansi)]
public struct MMTPRcnxReq
{
[FieldOffset(0)]
public Int32 Port;
[FieldOffset(4)]
public byte SubsId;
[FieldOffset(4 + FIELD_SIZE_SUBS_ID + 1)]
public byte Options;
}
現在我要訪問SUBID的價值實際上是字符數組和〔實施例比較它一個字符串在我的託管代碼中, 像下面那樣
if(mMTPRcnxReq.SubsId == "12345") // WRONG
如何我可以這樣做嗎?
奇怪的代碼。你根本不需要'FieldOffset',使用'[MarshalAs(UnmanagedType.ByValArray,SizeConst = FIELD_SIZE_SUBS_ID + 1)] public Byte [] SubsId;',這與Options相同。 –
我對你的問題感到困惑,首先'char'有多個'byte',而一個字符串至少有1個'char'。 'SubsId'不能是一個字符數組,如果它聲明爲'byte'。 – Jodrell
@AlexFarber,我根本不想使用引用類型。 – Parid0kht