hur.cn - 华软网

 热门搜索

调用 vc Dll 结构参数报错

  作者:未知    来源:网络    更新时间:2011/6/10
vc6.0 dll 接口说明:

用户基本信息,将电脑上的员工基本信息下载到考勤机或将考勤机中的员工基
本信息保存到电脑时,定义说明。
typedef struct
{
unsigned int UserID; // 员工编号 长度4 字节
char UserName[USER_NAME_SIZE]; // 员工姓名 长度14 字节
unsigned char ManageClass; // 管理级别[MXManageType_T]是指通过
MX 系列指纹考勤机菜单进行考勤机维护操作的权限 长度1 字节
unsigned char AttendRole; // 保留 长度1 字节
unsigned char DeptID; // 所属部门代码 长度1 字节
unsigned char AttendPlan; // 保留 长度1 字节
unsigned char VerifyMode; // 验证方式:指纹、指纹+卡、卡三种身份验证方式 长度1 字节
unsigned char FingerCount; // 保留 长度1 字节
unsigned int UserPassword; // 员工密码,指纹不能用时可以采用密码方式考勤 长度1 字节
unsigned int CardID[2]; // ID 卡号 长度8 字节
unsigned char Reserve[4]; // 保留 长度4 字节
}MXUserInfo_T;
开发过程中,可以将为该结构分配40 字节长度的unsigned char 型数组。将需
要处理的字段填写或修改。

//员工基本信息
typedef struct  
{
unsigned int UserID; //员工编号
char UserName[USER_NAME_SIZE]; //员工名称
unsigned char ManageClass; //管理级别[MXManageType_T]
unsigned char AttendRole; //班次规则
unsigned char DeptID; //所属部门
unsigned char AttendPlan; //考勤规则类型
unsigned char VerifyMode; //验证方式
unsigned char FingerCount; //已添加指纹总数
unsigned int UserPassword; //员工密码
unsigned int CardID[2]; //ID卡号
unsigned char Reserve[4]; //保留
}MXUserInfo_T;



//MXATTAPI int MXAtt_UpUserInfo(int iHandle,int iIndex,unsigned char* oUserInfo,int* oUserInfoLen);


  delphi 有中声明及实现

  
  PMXUserInfo =^MXUserInfo;
  MXUserInfo =record
  UserID:DWORD ; //员工编号
  serName :array[0..17] of char ; //员工名称
    
  ManageClass :BYTE; //管理级别[MXManageType_T]
    
  AttendRole :BYTE; //班次规则
    
  DeptID:BYTE; //所属部门
    
  AttendPlan:BYTE; //考勤规则类型
    
  VerifyMode:BYTE; //验证方式
    
  FingerCount:BYTE; //已添加指纹总数
    
  UserPassword:DWORD; //员工密码
    
  CardID:array[0..1] of DWORD;//ID卡号
    
  serName :array[0..3] of Byte;//保留
  end;


Function MXAtt_UpUserInfo(iHandle:Integer;iIndex:Integer;UserInfo:PMXUserInfo;oUserCount:integer):Integer; stdcall;

implementation

function MXAtt_UpUserInfo; external 'MXAttendAPI.dll';



procedure TfrmAttTest.BTNUpUserInfoClick(Sender: TObject);
var
  oUserInfoLen:string;
  iIndex :Integer;
  UserInfo:PMXUserInfo;
  UserCount:Integer;
begin
 iIndex :=1;
  New (UserInfo) ;
  UserCount:=40;
 if MXAtt_UpUserInfo(HandleId,iIndex,UserInfo,UserCount)=0then
  ShowMessage('设置GetUserCount成功'+Inttostr(UserCount))
  else
  ShowMessage('失败') ;
    
// Function MXAtt_UpUserInfo(iHandle:Integer;iIndex:Integer;var UserInfo:PMXUserInfo;oUserCount:integer):Integer; stdcall;

  //Function MXAtt_UpUserInfo(iHandle:Integer;iIndex:Integer;oUserInfo:Pchar ;var oUserInfoLen:Integer):Integer;
end;



调用Dll报内存错误,。




---华软 网友回答---
char UserName[USER_NAME_SIZE]; // 员工姓名 长度14 字节
serName :array[0..17] of char ;
---华软网友回复---
MXUserInfo =record
  UserID:DWORD ; //员工编号
  serName :array[0..17] of char ; //员工名称
    
  ManageClass :BYTE; //管理级别[MXManageType_T]
    
  AttendRole :BYTE; //班次规则
    
  DeptID:BYTE; //所属部门
    
  AttendPlan:BYTE; //考勤规则类型
    
  VerifyMode:BYTE; //验证方式
    
  FingerCount:BYTE; //已添加指纹总数
    
  UserPassword:DWORD; //员工密码
    
  CardID:array[0..1] of DWORD;//ID卡号
    
  serName :array[0..3] of Byte;//保留
  end;

翻译过来就是
struct MXUserInfo
{
  DWORD UserID ; //员工编号
  char serName[18] ; //员工名称
    
  BYTE ManageClass; //管理级别[MXManageType_T]
    
  BYTE AttendRole; //班次规则
    
  BYTE DeptID; //所属部门
    
  BYTE AttendPlan; //考勤规则类型
    
  BYTE VerifyMode; //验证方式
    
  BYTE FingerCount; //已添加指纹总数
    
  DWORD UserPassword; //员工密码
    
  DWORD CardID:array[2];//ID卡号
    
  BYTE serName[4];//保留
};

---华软网友回复---
//MXATTAPI int MXAtt_UpUserInfo(int iHandle,int iIndex,unsigned char* oUserInfo,int* oUserInfoLen);

Vc的这个接口在delphi声明是这样的吗?
function MXAtt_UpUserInfo( iHandler:integer;iIndex:integer;oUserInfo:btye;var oUserInfoLen:Integer):integer;
如果是这样的,如何得到反的员工信息值.      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。