如何在内存映射文件中编写包含字符串值的结构? [英] How to write a structure that contains a string value in Memory Mapped File?
问题描述
亲爱的先生,
我创建了以下结构:-
[StructLayout(LayoutKind.Explicit)]
public struct Valuess // as a Union
{
[FieldOffset(0)]
public long lval;
[FieldOffset(0)]
public double rval;
[FieldOffset(12)]
[MarshalAs(UnmanagedType.AsAny)]
public byte[] cval;
};
public struct SMDATA
{
public int type;
public double AvgVal;
public double MeanVal;
public short projectLimoStatus;
public short SystemLimoStatus;
public short TestLimoStatus;
public Valuess Val; // object of above union
}
推荐答案
你好Sandeep Tiwari,
Hello Sandeep Tiwari,
1.问题在于,如果"cval"不正确,则返回"0".如果是一个byte [],则必须在"Valuess"中指定其大小.结构,例如:
1. The problem is that if "cval" is a byte[], its size must be specified in the "Valuess" structure, e.g. :
[StructLayout(LayoutKind.Explicit)]
public struct Valuess // as a Union
{
[FieldOffset(0)]
public long lval;
[FieldOffset(0)]
public double rval;
[FieldOffset(12)]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 11)]
public byte[] cval;
};
1.1在以上对值"的定义中,"cval"是指是一个11字节的嵌入式数组.
1.1 In the above definition for "Valuess", "cval" is an embedded array of 11 bytes.
2.如您所愿,"cval"为了实际上包含一个字符串,您还可以指定"cval"作为值"内部的嵌入字符串结构,例如:
2. As you intend "cval" to actually contain a string, you may also specify "cval" as an embedded string inside the "Valuess" structure, e.g. :
[StructLayout(LayoutKind.Explicit)]
public struct Valuess // as a Union
{
[FieldOffset(0)]
public long lval;
[FieldOffset(0)]
public double rval;
[FieldOffset(12)]
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=11)]
public string cval;
};
2.1在上面的示例中,"cval"表示是"Valuess"内部的嵌入字符串.长度为11个字符(包括结尾的NULL字符)的结构.
2.1 In the above example, "cval" is an embedded string inside the "Valuess" structure of size 11 characters long (including the terminating NULL character).
3.您还可以指定"cval"是C风格字符串的指针,例如:
3. You may also specify that "cval" be a pointer to a C-style string, e.g. :
[StructLayout(LayoutKind.Explicit)]
public struct Valuess // as a Union
{
[FieldOffset(0)]
public long lval;
[FieldOffset(0)]
public double rval;
[FieldOffset(12)]
[MarshalAs(UnmanagedType.LPStr)]
public string cval;
};
-生物学.
这篇关于如何在内存映射文件中编写包含字符串值的结构?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!