积极答复者
js调用ocx的疑问:类型不匹配

问题
-
近日测试指纹
在与WEB连接时采用前台js调用,与指纹机的连接及释放边接,关闭指纹机操作正常,但读取指纹机信息时比如时间时就出现:(类型不匹配)型态不符合(fkid.GetDeviceTime(adate);这一行),相关代码如下:var fkid=document.getElementById("fkocx"); fkid.connectUSB(1,1263); var adate = new Date(); try { fkid.GetDeviceTime(adate);} catch(e) {e.description ;}
但是在与win连接时同样调用函数则执行正常,相关代码如下:Dim vdwDate As Date FKAttend.ConnectUSB(1, 1263) FKAttend.GetDeviceTime(vdwDate) TextBox3.Text = vdwDate FKAttend.DisConnect()
哪路大虾能帮看看错误在哪里?在js下要如何修改?
先谢过!后检查了原c++代码中接口函数定义为long FP_EXPORT FK_GetDeviceTime(long nHandleIndex, DATE * pnDateTime);
会是这里的问题吗?- 已移动 eryang 2011年3月10日 1:44 move to web forum for better support. (发件人:.NET Framework 一般性问题讨论区)
答案
-
<OBJECT id="fkocx" classid="clsid:6343808C-E476-40F0-ADCF-97E7863F25E9" VIEWASTEXT> <PARAM NAME="_Version" VALUE="65536"> <PARAM NAME="_ExtentX" VALUE="847"> <PARAM NAME="_ExtentY" VALUE="847"> <PARAM NAME="_StockProps" VALUE="0"> </OBJECT> <INPUT name="gtime" value="GetDeviceDate" type="button" > <script language="vbscript" event="onclick" for="gtime"> dim adate adate=#3/16/2011# document.getElementById("fkocx").connectUSB(1,1263) document.getElementById("fkocx").GetDeviceTime(adate) </script>
【孟子E章】- 已标记为答案 孟宪会Moderator 2011年4月14日 2:05
全部回复
-
你传的是adate变量啊,不是字符串,你怎么知道穿进去的是yyyy/MM/dd格式的呢? 如果c++程序是你自己的吗可以修改的话,建议改成字符串格式,就不会存在这样麻烦的问题 了
【孟子E章】
非常感谢版主的关注和回复c++程序不是我的,我是根据指纹机厂商提供的SDK开发包和demo(vb6及vb.net版),驱动,接口函数说明等,其中还有几个C++文件,测试看与WEB连接能否读取指纹机中的信息
var fkid=document.getElementById("fkocx"); var adate="2011/03/12"; fkid.connectUSB(1,1263); try { fkid.GetDeviceTime(adate);} catch(e) { alert(e.description);} finally {alert(typeof(adate));
我修改代码如上,提示adate确实为string,但如你所说也许格式的问题,那个函数就是不认(同样的情况在WINFORM下却可以)
还要做怎样的检查呢?
-
因为页面中使用ocx,只有IE支持,你还可以试试把javascript改成Vbscript脚本进行测试,vbs和vb写法类似
如果这样不行,就没招了,
【孟子E章】非常感谢版主的再次关注和耐心指导
我改成vbs,相关代码如下:
...
<OBJECT id="fkocx" classid="clsid:6343808C-E476-40F0-ADCF-97E7863F25E9" VIEWASTEXT>
<PARAM NAME="_Version" VALUE="65536">
<PARAM NAME="_ExtentX" VALUE="847">
<PARAM NAME="_ExtentY" VALUE="847">
<PARAM NAME="_StockProps" VALUE="0">
</OBJECT>
<INPUT name="gtime" value="GetDeviceDate" type="button">
<script language="vbscript" event="onclick" for="gtime">
msgbox fkocx
dim adate
adate=#3/16/2011#
'fkocx.connectUSB(1,1263)
'fkocx.GetDeviceTime(adate)
</script>
...执行时msgbox内容为空白
这需要怎样处理呢?(不好意思,对VBS用的比较少,麻烦多指导,tks!)
-
<OBJECT id="fkocx" classid="clsid:6343808C-E476-40F0-ADCF-97E7863F25E9" VIEWASTEXT> <PARAM NAME="_Version" VALUE="65536"> <PARAM NAME="_ExtentX" VALUE="847"> <PARAM NAME="_ExtentY" VALUE="847"> <PARAM NAME="_StockProps" VALUE="0"> </OBJECT> <INPUT name="gtime" value="GetDeviceDate" type="button" > <script language="vbscript" event="onclick" for="gtime"> dim adate adate=#3/16/2011# document.getElementById("fkocx").connectUSB(1,1263) document.getElementById("fkocx").GetDeviceTime(adate) </script>
【孟子E章】- 已标记为答案 孟宪会Moderator 2011年4月14日 2:05
-
非常感谢版主的热心解答和耐心指导
我参考你的解答,改写如下
dim adate adate=#3/16/2011# document.getElementById("fkocx").connectUSB 1,1263 call document.getElementById("fkocx").GetDeviceTime(adate)
当执行至第四行时又出现:Type mismatch:'document.getElementById(...).GetDeviceTime(adate)'
出现正如你前面所述的预期结果,再次向热心的版主表示感谢!
我已将在web下出现的此种情况反馈给指纹机厂家,期待回复中。。。