当前位置: 代码迷 >> VFP >> 怎么用VB做一个ActiveX Dll 给VFP 调用
  详细解决方案

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

热度:8992   发布时间:2013-02-26 00:00:00.0
如何用VB做一个ActiveX Dll 给VFP 调用
最近做个东西, 使用的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的内容
  相关解决方案