c#调用 VC嵌套结构体
我需要调用一个VC的dll,其中一个函数需要传递一个嵌套结构体,声明如下:
typedef struct
{
int alarmtype;
int checkvaltype;
short relayno;
float alarmtemp;
short reserver;
}ALARMSETTING, *LPALARMSETTING;
typedef struct
{
int cbSize;//结构体的长度
char Caption[50];
short fiberport;
short serialno;
int startposition;
int endposition;
short lesspoint;
int AlarmItemCount;
ALARMSETTING AlarmItem[ALARMITEMCOUNT];
}MEASUREFIBERSECT, *LPMEASUREFIBERSECT;
函数为
DLLPORT int WINAPI FDAddMeasureSect(int icontrol, LPMEASUREFIBERSECT palarm);
我在c#中对应的声明为:
public struct ALARMSETTING
{
public int alarmtype;
public int checkvaltype;
public short relayno;
public float alarmtemp;
public short reserver;
}
[StructLayout(LayoutKind.Sequential,Pack=1)]
public struct MEASUREFIBERSECT
{
public int cbSize;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=50)]
public char[] caption;
public short fiberport;
public short serialno;
public int startposition;
public int endposition;
public short lesspoint;
public int AlarmItemCount;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
ublic ALARMSETTING[] AlarmItems;
}
函数声明为:
[DllImport("FDInterface.dll")]
public static extern int FDAddMeasureSect(int icontrol,ref MEASUREFIBERSECT palarm);
使用时:
MEASUREFIBERSECT palarm = new MEASUREFIBERSECT();
对palarm进行赋值
最后对palarm.cbSize进行赋值,表示整个结构体的长度
palarm.cbSize = Convert.ToInt16(Marshal.SizeOf(palarm));
int result=FDAddMeasureSect(this.DeviceID,ref palarm);
调用的过程中函数没有报错,调用成功,可是最后dll执行的结果不对。这个dll肯定没有问题,因为我们以前使用VB 调用的时候没有问题,我想知道我的代码在什么地方有问题,感谢大家,我没有分了,希望大家能帮帮我