jacob 调用ocx
场景:
java中jacob调用ocx出错!!!
最近公司在做一个项目中有需要调用远程视频监控的部分。
远程的视频服务器是由第三方公司开发的,他们提供了ocx控件用于做开发调用。
在Javascript已经实现调用,远程视频可以调用出来。
但是在js中调用,每台客户机就都得下载安装ocx控件(当然这样也可以)。
想要实现的是在服务器端安装ocx控件,由服务器端的java后台程序去调用ocx控件对远端视频服务器进行操作,
这样客户端机器上就不用每台机器都安装ocx控件了。(想法是这样的)
如是开始寻找java中调用ocx控件的办法方法,jni、jacob....
但是试验下来发现调用像word、excel这些ActiveX控件是可以的,操作没有问题,换作视频的ocx控件就不能调用了。
请各位来帮忙解决解决。
JavaScript下调用的代码如下:(这种方式是Ok的)
尝试在Java下使用jacob调用的代码如下:
出错语句在:Variant result = Dispatch.call(NVS5000,"LoginNVS","");
(只要是调用ocx的方法就会出错。)
eclipse控制台下的错误如下:
请各位大大帮忙看看是什么问题?
------解决方案--------------------
http://topic.****.net/t/20050826/17/4233746.html看看这个
------解决方案--------------------
真有问题啊 。。
------解决方案--------------------
------解决方案--------------------
OCX是vb的控件么
本人理解这种东西类似 dll 应该不会需要固定的语言去调用 里面封装各种处理方法 规定了调用的数据格式和返回的数据格式 至于操作失败 要自己找找原因 多打印一些数据 看看 ocx的帮助文档 如果需要和ocx的客服研究一下
java中jacob调用ocx出错!!!
最近公司在做一个项目中有需要调用远程视频监控的部分。
远程的视频服务器是由第三方公司开发的,他们提供了ocx控件用于做开发调用。
在Javascript已经实现调用,远程视频可以调用出来。
但是在js中调用,每台客户机就都得下载安装ocx控件(当然这样也可以)。
想要实现的是在服务器端安装ocx控件,由服务器端的java后台程序去调用ocx控件对远端视频服务器进行操作,
这样客户端机器上就不用每台机器都安装ocx控件了。(想法是这样的)
如是开始寻找java中调用ocx控件的办法方法,jni、jacob....
但是试验下来发现调用像word、excel这些ActiveX控件是可以的,操作没有问题,换作视频的ocx控件就不能调用了。
请各位来帮忙解决解决。
JavaScript下调用的代码如下:(这种方式是Ok的)
- HTML code
<HTML> <HEAD> <TITLE>视频调用</TITLE> <script language="javascript" for="NVS5000" event="OnLoginNVSResult(nResult)"> //ocx对象的OnLoginNVSResult事件触发时 OnLoginNVS(nResult); </script> <script type="text/javascript" language="javascript"> function $() { var elements = new Array(); for (var i = 0; i < arguments.length; i++) { var element = arguments[i]; if (typeof element == 'string') { element = document.getElementById(element); } if (arguments.length == 1) { return element; } elements.push(element); } return elements; } //初始化方法 function init() { try{ //为ocx对象属性赋值 $("NVS5000").URL = "192.168.15.153"; //前端设备地址 $("NVS5000").Port = 5200; //端口号 $("NVS5000").NVSName = "NVS"; $("NVS5000").UserName = "admin"; //用户名 $("NVS5000").UserPswd = "admin"; //密码 $("NVS5000").SetLoginMode(1); //设置登录模式 $("NVS5000").Tips_Off(); $("NVS5000").AlarmBox_Off(); $("NVS5000").FullWnd_Off(); $("NVS5000").SocketProtocol=0; //设置套接字协议 $("NVS5000").ChannelNum= 0; //频道号 //登录前端设备 $("NVS5000").LoginNVS(); //浏览器状态显示 window.status = $("NVS5000").URL+":"+$("NVS5000").Port+" , Account:"+$("NVS5000").UserName+"/"+$("NVS5000").UserPswd; }catch(e){} } //登录时触发方法 function OnLoginNVS(nResult) { try{ if(nResult < 2) { switch(nResult) { case -1: window.status = " 操作失败!"; break; case -2: window.status = " 请求被拒绝!"; break; case -3: window.status = " 登录用户已满!"; break; case -4: window.status = " 用户名或密码和系统不匹配!"; break; case -5: window.status = " 已经关闭IE!"; break; case -6: window.status = " 连接DDNS失败!"; break; case -7: window.status = " 获取设备信息失败!"; break; default: window.status = " 其他未知错误! " + nResult; break; } return false; }else{ //启动视频 $("NVS5000").StartView(); } }catch(e){} } </script> </HEAD> <BODY onLoad="init()"> <object name="NVS5000" ID="NVS5000" width="705" height="570" CLASSID="CLSID:08353A15-031B-4FE1-9BF5-5B4F721BA61A"> </object> </BODY> </HTML>
尝试在Java下使用jacob调用的代码如下:
- Java code
package com.mdbq.jni; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.ComThread; import com.jacob.com.Dispatch; import com.jacob.com.Variant; public class XDViewDemo { public static void main(String[] args) { //初始化线程 ComThread.InitSTA(); ActiveXComponent activeX = new ActiveXComponent("CLSID:08353A15-031B-4FE1-9BF5-5B4F721BA61A"); Dispatch NVS5000 = (Dispatch)activeX.getObject(); Variant result = Dispatch.call(NVS5000,"LoginNVS",""); //释放线程 ComThread.Release(); } }
出错语句在:Variant result = Dispatch.call(NVS5000,"LoginNVS","");
(只要是调用ocx的方法就会出错。)
eclipse控制台下的错误如下:
- Java code
Exception in thread "main" com.jacob.com.ComFailException: A COM exception has been encountered: At Invoke of: LoginNVS Description: 灾难性故障 at com.jacob.com.Dispatch.invokev(Native Method) at com.jacob.com.Dispatch.invokev(Dispatch.java:858) at com.jacob.com.Dispatch.callN(Dispatch.java:455) at com.jacob.com.Dispatch.call(Dispatch.java:544) at com.mdbq.jni.XDViewDemo.main(XDViewDemo.java:18)
请各位大大帮忙看看是什么问题?
------解决方案--------------------
http://topic.****.net/t/20050826/17/4233746.html看看这个
------解决方案--------------------
真有问题啊 。。
------解决方案--------------------
------解决方案--------------------
OCX是vb的控件么
本人理解这种东西类似 dll 应该不会需要固定的语言去调用 里面封装各种处理方法 规定了调用的数据格式和返回的数据格式 至于操作失败 要自己找找原因 多打印一些数据 看看 ocx的帮助文档 如果需要和ocx的客服研究一下