最近做个东西, 使用的dll 只有VB 的实例代码
其中有一个Function “GetEnrollData” 使用了 Variant* 变量。 VFp 代码出错, 类型不匹配。
微软的说法是 设计上的问题 先天性问题。(参见微软的说法http://support.microsoft.com/kb/177575/zh-cn)
所以只好用 VB 在做一个DLL 来解决。
不用vb VB好多年了, 希望大家给予指点。
本身函数声明格式
[功能] 函数GetEnrollData从指定的终端机获取一条指定的登记数据.
[格式] BOOL GetEnrollData( Long dwMachineNumber ,
Long dwEnrollNumber ,
Long dwBackupNumber ,
Long FAR* dwMachinePrivilege ,
Long FAR* dwEnrollData ,
Long FAR* dwPassWord );
------解决方案--------------------------------------------------------
直接在 VFP 中调用这个 DLL(即不用 VB 再做 DLL),将 Variant* 声明为字符型,然后再做相应转换。
------解决方案--------------------------------------------------------
你的格式和功能说明均有6个参数,而VB示例却有7个参数,哪个错了?
------解决方案--------------------------------------------------------
应该是7个参数,
long dwMachineNumber ,
long dwEnrollNumber ,
long dwEMachineNumber ,
long dwBackupNumber ,
long FAR* dwMachinePrivilege ,
long FAR* dwEnrollData ,
long FAR* dwPassWord
------解决方案--------------------------------------------------------
在 vfp 中试试:
vMachineNumber=1
vEnrollNumber=12345678
vEMachineNumber=1
vBackupNumber=0
vMP=Replicate(Chr(0),255)
vEnrollData=Replicate(Chr(0),1828)
vPSW=Replicate(Chr(0),255)
If Thisform.FPKEEPER1.GetEnrollData(vMachineNumber,vEnrollNumber,vEMachineNumber,vBackupNumber,@vMP,@vEnrollData,@vPSW) && FPKEEPER1为OCX的Name
Messagebox('MachinePrivilege='+vMP)
Messagebox('EnrollData='+vEnrollData)
Messagebox('PassWord='+vPSW)
Endif
你方便的话帖一下上面Messagebox的内容