Type
TParaBuf=record
ComNo:integer; //串口号
Baud:integer; //波特率
Sys_Sec:array [1..3] of integer; //系统扇区1,2,3
User_Sec:array [1..3] of integer; //用户扇区1,2,3
AuthorNo:array [1..6] of PChar; //授权码1,2,3,4,5,6
end;
TPParaBuf=^TParaBuf;
如题。
TParaBuf=record
ComNo:integer; //串口号
Baud:integer; //波特率
Sys_Sec:array [1..3] of integer; //系统扇区1,2,3
User_Sec:array [1..3] of integer; //用户扇区1,2,3
AuthorNo:array [1..6] of PChar; //授权码1,2,3,4,5,6
end;
TPParaBuf=^TParaBuf;
如题。
解决方案 »
- SQL2005连接问题
- c# winform 多线程 控件操作的问题
- LISTVIEW的Item的Text怎么全部显示出来?谢谢!
- C# 如何改变鼠标样式?
- 求教一个frame间传值的问题(在线等)
- 有C#的高手吗?
- listBox自动更新?
- checkedListBox.CustomTabOffsets这个属性到底怎么用? 什么时候用?
- 如何在显示主窗体后,关闭splash窗体?
- 为什么我向窗体添加CommonDialog等控件时会出现“你没有使用此ActiveX控件的许可证”?
- 在c#下建立asp 应用程序怎么见不到datagrid里面 的数据只有列名~~~~~~~
- IT农庄8号群7542065,UP有分
public struct TParaBuf
{
public int ComNo;
public int Baud;
public int[3] Sys_Sec;
public int[3] User_Sec;
public int[6] AuthorNo;
}
public int[3] User_Sec;
public int[6] AuthorNo;
C#不可以这样定义数组的。
{
public int ComNo;
public int Baud;
public int[] Sys_Sec;
public int[] User_Sec;
public string[] AuthorNo;
}
{
public int ComNo;
public int Baud;
public int[] Sys_Sec = new int[3];
public int[] User_Sec = new int[3];
public string[] AuthorNo = new string[6];
}
{
public int ComNo;
public int Baud;
public int[] Sys_Sec;
public int[] User_Sec;
public string[] AuthorNo;
}
{
public int ComNo;
public int Baud;
public int[] Sys_Sec;
public int[] User_Sec;
public string[] AuthorNo;
}
{
public int ComNo;
public int Baud;
public int[] Sys_Sec;
public int[] User_Sec;
public string[] AuthorNo;
}
这种方法我试过了。int还行。数组,就无法识别了。
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct TParaBuf
{
public int ComNo;
public int Baud;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=3)]
public int[] Sys_Sec, User_Sec;
[MarshalAs(UnmanagedType.LPStr, SizeConst=6)]
public string[] AuthorNo;
}
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet=CharSet.Ansi)]
public struct TParaBuf
{
public int ComNo;
public int Baud;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=3)]
public System.Int16[] Sys_Sec, User_Sec;
[MarshalAs(UnmanagedType.LPStr, SizeConst=6)]
public string[] AuthorNo;
}
public struct TParaBuf
{
public int ComNo;
public int Baud;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=3)]
public System.Int16[] Sys_Sec, User_Sec;
[MarshalAs(UnmanagedType.LPStr, SizeConst=6)]
public string[] AuthorNo;
}
用这个方法会说对像没有实例化。
public struct TParaBuf
{
public int ComNo;
public int Baud;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=3)]
public int[] Sys_Sec, User_Sec;
[MarshalAs(UnmanagedType.LPStr, SizeConst=6)]
public string[] AuthorNo;
}
------------------------------------
TParaBuf a=new TParaBuf();
a.ComNo=*;
a.Baud=*;
a.Sys_Sec=new int[]{*,*,*};
a.User_Sec=new int[]{*,*,*};
a.AuthorNo=new string[]{...};
然后将参数传入函数不行吗?
可以参考
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconstructssample.htm另外结构中的数组可以分开写(幸好不是255长的数组,呵呵)[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct TParaBuf
{
public int ComNo;
public int Baud;
public int Sys_Sec1;
public int Sys_Sec2;
public int Sys_Sec3;
public int User_Sec1;
public int User_Sec2;
public int User_Sec3;
public string AuthorNo1;
public string AuthorNo2;
public string AuthorNo3;
public string AuthorNo4;
public string AuthorNo5;
public string AuthorNo6;
}
buf1:TParaBuf;
begin
buf1.ComNo:=strtoint(edComNo.Text);
buf1.Baud:=strtoint(edBaud.Text);
buf1.Sys_Sec[1]:=strtoint(cbSysSec1.Text);
buf1.Sys_Sec[2]:=strtoint(cbSysSec2.Text);
buf1.Sys_Sec[3]:=strtoint(cbSysSec3.Text);
buf1.AuthorNo[1]:=stralloc(17);
buf1.AuthorNo[2]:=stralloc(17);
buf1.AuthorNo[3]:=stralloc(17);
ReadAuthorCard(@buf1);
Delphi里是这样调的。
public struct TParaBuf
{
public int ComNo;
public int Baud;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=3)]
public int[] Sys_Sec, User_Sec;
[MarshalAs(UnmanagedType.ByValArray ,ArraySubType=UnmanagedType.LPStr , SizeConst=6),]
public StringBuilder[] AuthorNo;
}
TParaBuf tpb = new TParaBuf();
tpb.Baud = 9600;
tpb.ComNo = 1;
tpb.Sys_Sec = new int[3];
tpb.Sys_Sec[0] = 1;
tpb.Sys_Sec[1] = 2;
tpb.Sys_Sec[2] = 3; tpb.AuthorNo = new StringBuilder[6];
tpb.AuthorNo[0] = new StringBuilder(17);
tpb.AuthorNo[1] = new StringBuilder(17);
tpb.AuthorNo[2] = new StringBuilder(17); ReadAuthorCard(ref tpb);
{
public int ComNo;
public int Baud;
public int[] Sys_Sec;
public int[] User_Sec;
public string[] AuthorNo;
}