activex 控件已打包成cab文件,但是里面的dll未下载,请教高手
小弟,做了个读二代身份证的控件,并打包成cab文件,其中需用到2个dll,WltRS.dll和sdtapi.dll,这两个其中的调用方法是在模块中声明的,方式是如下等等:Public Declare Function SDT_OpenPort Lib "sdtapi.dll" (ByVal IPort As Integer) As Integer
在用户控件中调用stdapi.dll的方法时如下:
Public Function fx_get_int() As String
Dim SamRet As Integer
PortFlag = CLng(1001)
SamRet = SDT_OpenPort(PortFlag)
If SamRet <> &H90 Then '端口选择错误或设备没有连接,请重试
fx_get_int = "0"
Else
SDT_ClosePort (PortFlag)
fx_get_int = "1" '打开端口成功
End If
End Function
然后将工程生成ocx,并用vb6自带的打包工具进行打包成cab文件,而且cab文件中已有WltRS.dll和sdtapi.dll这两个dll,
在然后加入到我的web工程中引用:
<OBJECT ID="UEControl"
CLASSID="CLSID:0F435D42-C478-4146-9260-0874C2D1E52F"
CODEBASE="TwoIdCard.CAB#version=1,0,0,7">
</OBJECT>
<input type="button" value=" sfz " onclick="sfz()">
并用如下js方法调用这个activex控件读取身份证信息
function sfz(){
UEControl.fx_get_int();
alert("222");
UEControl.fx_connection();
alert(UEControl.fx_get_name());
UEControl.fx_get_zxzz()
alert(UEControl.fx_get_photo());
}
打开网页时,控件能正常显示,但是发现WltRS.dll和sdtapi.dll未下载到windows\system32下而导致运行如上js方法时提示“stdapi.dll文件未找到”,但是其他cab包里的dll或者ocx已下载到system32下。
后来网上查了下,说是inf中的设置能指定WltRS.dll和sdtapi.dll的下载,及下载位置
于是改inf文件如下
原先是这样的:
[sdtapi.dll]
file-win32-x86=thiscab
RegisterServer=no
DestDir=
FileVersion=0,0,0,0
[WltRS.dll]
file-win32-x86=thiscab
RegisterServer=no
DestDir=
FileVersion=0,0,0,0
改后是这样的:
[sdtapi.dll]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=0,0,0,0
[WltRS.dll]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=0,0,0,0
但是还是未下载
但是如果我直接把这两个dll放到system32下是可以读身份证信息的。
现在我实在是没办法了,请教高手
--------------------编程问答-------------------- 你修改后重新生成CAB了吗? --------------------编程问答-------------------- 重新生成了 --------------------编程问答-------------------- 江南春~来了...
问题就好办了
顶起,加油 --------------------编程问答-------------------- 顶起,加油 --------------------编程问答-------------------- 自己在检查一下cab是否配置正确,还有是否有权限拷贝dll到系统目录等.. --------------------编程问答-------------------- 能发一份读二代身份证的控件代码给我吗?我正想找这样的资料! --------------------编程问答-------------------- 能发一份读二代身份证的控件代码给我吗?我正想找这样的资料! mate33@21cn.com --------------------编程问答-------------------- 我也遇到类似的问题,在本机上可以弄个测试页看到效果,但在局域网访问IIS时就不能正常显示 --------------------编程问答-------------------- 用Dependency Walker这个工具查一下WltRS.dll和sdtapi.dll是否还依赖其它的dll,一并添加到inf中 --------------------编程问答-------------------- 天狼工作室 http://www.j2soft.cn/
cab的安装信息文件inf的结构如下:
;天狼工作室SiriusTifView控件
;http://www.j2soft.cn/
;版权所有2005-2009,天狼工作室
;保留所有权利
;DestDir 可以为 10 则在 Windows 目录,为 11 则在 Windows\System(32) 目录,或为空则在 Occache 目录。
[version]
signature="$CHICAGO$"
AdvancedINF=2.0
[DefaultInstall]
CopyFiles=install.files
RegisterOCXs=RegisterFiles
[RInstallApplicationFiles]
CopyFiles=install.files
RegisterOCXs=RegisterFiles
[DestinationDirs]
install.files=11
[SourceDisksNames]
1=%DiskName%,包名.CAB,1
[Add.Code]
×××.ocx=×××.ocx
…
…
…
[install.files]
[Add.Code]
×××.ocx=×××.ocx
…
…
…
[SourceDisksFiles]
×××.ocx=1
…
…
…
[×××.ocx]
file-win32-x86=thiscab
RegisterServer=yes
clsid={B6FCC215-D303-11D1-BC6C-0000C078797F}
DestDir=11
FileVersion=1,1,0,1
[RegisterFiles]
%11%\×××.ocx
…
… --------------------编程问答-------------------- [img=http://album.hi.csdn.net/app_uploads/asftrhgjhkjlkttttttt/20090615/115447203.p.gif?d=20090620115458847][/img] 同意,留个记号 --------------------编程问答-------------------- --------------------编程问答-------------------- 我也遇到过同样情况,不过现在解决了
--------------------编程问答-------------------- 通用二代身份证WEB终端控件及控件的VB源代码:
二代身份证WEB终端控件 lkySfzCard.ocx ,用于WEB开发,并提供该控件的VB源代码,有需要者请联系我。
QQ:150227334
--------------------编程问答-------------------- 在cab包的生成过程中,加入那两个dll,然后重新生成一遍。 --------------------编程问答-------------------- 做签名,打cab,ie设置为可信站点....... --------------------编程问答-------------------- 小弟也是做这一块的,对于那两个dll不能下载的原因是因为电脑上之前装过其他厂家的二代证阅读软件,sysytem32下已经有了这两个dll,而且很有可能被系统占用,无法覆盖,所以没下载下来,但是各厂家的sdtapi.dll名字一样但互相打架,所以你的程序或者机具调用不了,方法就是手动删掉其他厂家的这两个dll,或者你的dll不要放system32下,inf的路径改为比如10,windows目录下,我是这样做的,但是又引出另外一个问题,就是如果那台电脑的system32下有了这两个dll,则我的cab包里面的dll就不会下载到windows下,搞死人了,楼主,你解决了吗?共享下解决办法吧。
补充:VB , 控件