c#调用 VC嵌套结构体

xiarx228 2009-05-27 04:14:24
我需要调用一个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 调用的时候没有问题,我想知道我的代码在什么地方有问题,感谢大家,我没有分了,希望大家能帮帮我
...全文
137 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiarx228 2009-06-15
  • 打赏
  • 举报
回复
问题已经解决了,这个调用没有问题,是别的地方出的问题,谢谢大家
jimh 2009-06-05
  • 打赏
  • 举报
回复
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public ALARMSETTING[] AlarmItems;

这个需要初始化。
aight 2009-06-05
  • 打赏
  • 举报
回复
帮楼主顶一下。
feiyun0112 2009-05-31
  • 打赏
  • 举报
回复
ALARMSETTING AlarmItem[ALARMITEMCOUNT];

用IntPtr

*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)

http://feiyun0112.cnblogs.com/
ylwqhr 2009-05-31
  • 打赏
  • 举报
回复
回帖是一种美德!

110,571

社区成员

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

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

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