读书人

怎么用VB做一个ActiveX Dll 给VFP 调用

发布时间: 2012-03-18 13:55:39 作者: rapoo

如何用VB做一个ActiveX Dll 给VFP 调用
最近做个东西, 使用的dll 只有VB 的实例代码
其中有一个Function “GetEnrollData” 使用了 Variant* 变量。 VFp 代码出错, 类型不匹配。

微软的说法是 设计上的问题 先天性问题。(参见微软的说法http://support.microsoft.com/kb/177575/zh-cn)

所以只好用 VB 在做一个DLL 来解决。
不用vb VB好多年了, 希望大家给予指点。
本身函数声明格式
[功能] 函数GetEnrollData从指定的终端机获取一条指定的登记数据.
[格式] BOOLGetEnrollData(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的内容

读书人网 >VFP

热点推荐