C#结构体中非托管代码的定义及使用,在线等答案

kofbashen2001 2007-05-07 03:24:52
现在有个结构体,结构体的定义中包含另一个结构体数组,这个结构体数组的具体长度在定义时无法知道.
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct _tagBase
{
//这个结构体中包含的结构体数组长度.
public byte Count;
[MarshalAs(UnmanagedType.SafeArray/*这里的类型要选择哪个呢?具体有UnmanagedType.LpStruct, UnmanagedType.LpArray,至于后面的子项是根据前面你选择的类型来定的.比如我现在选择SafeArray,就有*/ SafeArrayUserDefinedSubType = /*这里我填_tagInSide时编译不通过,提示_tagInside类型在这当作变量使用*/)]
public _tagParameter[] Parameters;
}

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct _tagInSide
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
public byte[] ParamType;
public int Value;

};

问题在于,如果按上面的定义后,怎么在运行时得知整个_tagBase结构体的实际长度.代码如下:
_tagBase base = new _tagBase();
_tagInSide[] inside = new _tagInSide[1];
base.Count = inside.Count;
int StructSize = Marshal.SizeOf(typeof(_tagBase));
StructSize得到的值为5,这样的定义Marshal.Sizeof()取到的是第二个结构体的地址作而不是取其内容.我想得到的是9.请问如何实现如此类结构体的定义及长度的取得.如有不明的地方请大家指点.我再详细描述下.
...全文
454 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ivony 2007-05-13
  • 打赏
  • 举报
回复
在内存上分配一块空间,然后又去动态改变它的大小,这是不是意味着他一变大后面的数据就全都要往后推?它一变小就产生碎片?不产生新的实例又怎么可能更改大小?想要动态改变大小显然只有靠引用/指针分配另一块空间,你又不愿意用引用类型,又不愿意自己计算空间大小,天下有这么好的事情?
Ivony 2007-05-13
  • 打赏
  • 举报
回复
public _tagInSide[] Parameters;//这里定义时无法指定到底要多少个_tagInSide.因为我在实际应用时的个数是不一定的.但又需要在运行时能通过Marshal.SizeOf(typeof(_tagBase))这样子来取得整个结构体的实际大小.


你觉得可能么?
liberte 2007-05-13
  • 打赏
  • 举报
回复
Mark
kofbashen2001 2007-05-12
  • 打赏
  • 举报
回复
111
kofbashen2001 2007-05-07
  • 打赏
  • 举报
回复
public struct _tagBase
{
public byte Count;
[MarshalAs(UnmanagedType.SafeArray)]
public _tagInSide[] Parameters;//这里定义时无法指定到底要多少个_tagInSide.因为我在实际应用时的个数是不一定的.但又需要在运行时能通过Marshal.SizeOf(typeof(_tagBase))这样子来取得整个结构体的实际大小.
}
kofbashen2001 2007-05-07
  • 打赏
  • 举报
回复
//_tagBase的定义为下面这个
public struct _tagBase
{
public byte Count;
[MarshalAs(UnmanagedType.SafeArray)]
public _tagInSide[] Parameters;
}

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧