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;implementationfunction 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报内存错误,。

解决方案 »

  1.   

    //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;
    如果是这样的,如何得到反的员工信息值.
      

  2.   

    USER_NAME_SIZE,vc中不是14字节码,你怎么serName :array[0..17] of char ; //员工名称
    是18个字节了另外如果使用的2010,那么char改为ansichar,pchar改为pansichar
      

  3.   

    vc调用DELPHI写的DLL么?