none
js调用ocx的疑问:类型不匹配 RRS feed

  • 问题

  • 近日测试指纹
    在与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 一般性问题讨论区)
    2011年3月9日 7:17

答案

  • <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章】
    2011年3月16日 8:48
    版主

全部回复

  • 检查参数数量,另外格式化一下日期格式试试
    【孟子E章】
    2011年3月11日 0:43
    版主
  • 检查参数数量,另外格式化一下日期格式试试
    【孟子E章】


    感谢版主的回复

    在winform中,将日期类型改为字串Dim vdwDate As string="2011/3/1"执行是正常的,返回的是指纹机的当前时间

    但webform中,也将日期改为字串var adate="2011/3/1";出现的错误是一样的:类型不匹配

    还要检查哪里呢?

    2011年3月12日 0:58
  • 你传的是adate变量啊,不是字符串,你怎么知道穿进去的是yyyy/MM/dd格式的呢? 如果c++程序是你自己的吗可以修改的话,建议改成字符串格式,就不会存在这样麻烦的问题 了
    【孟子E章】
    2011年3月12日 13:33
    版主
  • 你传的是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下却可以)

    还要做怎样的检查呢?

    2011年3月13日 0:51
  • 你可以把浏览器的默认语言设置为不同的语言或者修改控制面板里面的区域格式设置进行测试。
    【孟子E章】
    2011年3月15日 5:27
    版主
  • 你可以把浏览器的默认语言设置为不同的语言或者修改控制面板里面的区域格式设置进行测试。
    【孟子E章】


    非常感谢版主的再次关注和回复

    根据你的指导,我先将IE8的网页语言由预设的zh-tw改为zh-cn及en-us,zh-hk等测试提示讯息同之前(型态不符合);后将控制面板里面区域格式中预设的zh-tw中的日期格式由yyyy-MM-dd改为yyyy/M/d测试提示讯息同之前,后将zh-tw改为zh-cn和en-us,日期格式也作反复的变更测试,提示讯息也一样(只是变为英文:type mismatch)

    还需要作如何检查或者处理呢?

    2011年3月15日 6:38
  • 因为页面中使用ocx,只有IE支持,你还可以试试把javascript改成Vbscript脚本进行测试,vbs和vb写法类似

    如果这样不行,就没招了,


    【孟子E章】
    2011年3月16日 0:55
    版主
  • 因为页面中使用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!)

    2011年3月16日 7:57
  • <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章】
    2011年3月16日 8:48
    版主
  • 非常感谢版主的热心解答和耐心指导

    我参考你的解答,改写如下

    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下出现的此种情况反馈给指纹机厂家,期待回复中。。。

    2011年3月16日 9:46