日期:2014-05-20  浏览次数:20780 次

接口实现(急!!!)
我有厂家提供的一个DLL,有接口如下:
  int     Real_Query(HANDLE   icdev,REALTIMEDATA   &Query_Data)
typedef   struct   _RealTimeData
{
UCHAR   SysStatus;   //系统硬件状态
UCHAR   OutPutStatus;//继电器输出状态
UCHAR   InputStatus; //输入口状态
short   Rec_Number;//记录总数
long     user_snr;//卡流水号
char     datetime[13];//打卡日期
UCHAR   node;//打卡结点或读头号
}REALTIMEDATA;

功能:实时查询下位结点的打卡情况。
参数:   icdev:(in)串口设备句柄
Query_Data:(out)REALTIMEDATA结构类型,返回实时数据
返回:   成功返回0


我如何才能在C#中实现啦?关键是结构体类型。

------解决方案--------------------
typedef struct _RealTimeData
{
UCHAR SysStatus; //系统硬件状态
UCHAR OutPutStatus;//继电器输出状态
UCHAR InputStatus; //输入口状态
short Rec_Number;//记录总数
long user_snr;//卡流水号
char datetime[13];//打卡日期
UCHAR node;//打卡结点或读头号
}REALTIMEDATA;

对应

public struct RealTimeDate
{
public byte SysStatus; //系统硬件状态
public byte OutPutStatus;//继电器输出状态
public byte InputStatus; //输入口状态
public Int16Rec_Number;//记录总数
public longuser_snr;//卡流水号
public string datetime;//打卡日期
public byte node;//打卡结点或读头号

}
------解决方案--------------------
我搜了一下看到下面这段文字,希望对你有用:
为了便于理解,我举个实例来展开论述。我们首先定义一个描述具体事物的结构体—— "611311班 "。
struct stuclass{
public string classname;
public object classmumber;
public int classnumber;
}
到目前为止,这个声明很像一个类。但是,下面你将看到在使用结构方面的许多限制。
客户不必对结构进行实例化(通过new关键字)。这是因为,作为一种值类型,结构一旦被声明,就被分配。
但是正是有了这种用法,所以我们如果不亲自对结构的成员进行显式的初始化(使用new关键字),那么字段就不会被初始化。如下面这段代码,编译将会出错:
stuclass s611311;
console.writeline(s611311.classname);
以下的代码将会纠正这个错误。注意,因为s611311.classname 是一个值类型,所以初始化模认为 0 ;
stuclass s611311 = new stuclass();
console.writeline(s611311.classname);