jacob访问ocx控件方法和遇到的问题
最近在进行摄像机的二次开发,摄像机厂商提供了使用C++开发的ocx控件:所以尝试使用jacob来进行访问。
操作步骤如下:
1, 从官网(http://sourceforge.net/projects/jacob-project/)下载了1.18版本的包。
2,jacob.jar放在 C:\Program Files\Java\jdk1.7.0_25\jre\lib\ext jacob-1.18-M1-x86.dll和 jacob-1.18-M1-x64.dll 放在 C:\Program Files\Java\jdk1.7.0_25\bin
3,jacob.jar添加到工程中。
4,将**.ocx放到System32目录下,并用regsvr32注册到系统
5, java代码如下:
ActiveXComponent com = new ActiveXComponent("NETVIDEOACTIVEX23.NetVideoActiveX23Ctrl.1");
Dispatch disp = (Dispatch)com.getObject();
Dispatch.call(disp,"Logout");
出现了异常
com.jacob.com.ComFailException: A COM exception has been encountered:
At Invoke of: Logout
Description: 8000ffff / 灾难性故障
at com.jacob.com.Dispatch.invokev(Native Method)
at com.jacob.com.Dispatch.invokev(Dispatch.java:625)
at com.jacob.com.Dispatch.callN(Dispatch.java:453)
6,看到网上有说在ocx中加一个函数,跳过加载时检查是否允许调用的判断(http://lvqingboy-163-com.iteye.com/blog/769358),就把公司以前用的一个ocx加了函数再用jaboc试了一次,能正常运行。
7,知道这个问题的原因了,因为找摄像机厂商比较麻烦,我们已经采取了其他方案,这个方案就不做了。
8,如果要修改这个问题,需要摄像机厂商,添加COleControl.IsInvokeAllowed (DISPID)函数,跳过允许调用的检查,接口就可以正常调用了;
下面是其他人在使用jacob时遇到的问题,记录如下:
1、在测试接口的过程中,出现了过jvm 栈溢出的异常信息(忘记截图了),经过检查,在ocx中使用了一个比较大的局部变量,造成jvm栈内存溢出异常,将ocx的内存改为堆内存,就正常了,没有尝试过修改jvm的参数配置,不知道会不会有效果;
2、引用传递,ocx中使用了引用传递参数作为返回值,在java中调用的时候需要按下面这种写法,才能正常返回数据,否则会报参数类型错误的异常
Variant userId = new Variant(new Integer(0), true);
Dispatch.call(dispatch, "GetOneUserID",userId);
3、因为是B/S结构程序(Spring、Struts、Hibernate),将jacob-1.17-M2.dll放到System32目录下是不行的,需要放到Tomcat的bin目录下面才能正常使用。
结论:java来调用ocx本来就算是很偏门的东西,而且确实不是java的长处。即便能成功,对ocx也有颇多要求,而且还牺牲了java跨平台的特性
jacob访问ocx控件方法和遇到的问题的更多相关文章
- Java 通过 jacob调用OCX控件
安装好要调用的ocx驱动,并通过注册表查询其对应的clsid. 下载jacob-1.18解压,将jacob-1.18-x86.dll文件复制到D:\Program Files (x86)\Java\j ...
- asp.net访问母版页控件方法
一.使用多种方式为内容页加载母版页默认情况下是给单个内容页指定一个母版页加载,当多个内容页需加载到同一个母版页时,我们可以通过配置文件为多个内容页批量加载母版页,另外,还可以在PreInit事件中动态 ...
- FAQ:win7和win8 64位注册ocx控件方法
win7/win8 问题所在: 64位的系统一般都是可以安装32位程序的, 执行 C:\Windows\SysWOW64\regsvr32.exe 而不是 C:\Windows\Sys ...
- 多线程访问winform控件出现异常的解决方法
一. 多线程访问winform控件出现异常的解决方法 1. 问题描述<1> 如果创建某控件的线程之外的其他线程试图调用该控件,则会引发一个 InvalidOperationExcept ...
- PHP调用OCX控件的具体方法
需要设置php.ini文件,找到这行com.allow_dcom=true,把com组件支持启用 使用PHP调用OCX控件,本不是个难题,但现实中采用flash回避的方法更通用.真正使用ocx的不多, ...
- Delphi安装/卸载OCX控件的方法
delphi 安装卸载ocx 请参见 如下 http://blog.csdn.net/xt_chaoji/article/details/7027298 打开Delphi,关闭所有项目. 1. ...
- 在 浏览器中调用外接设备— —手写板 【win10 x64 手动注册ocx控件的方法】
PPAXSignToolSDK.ocx 浏览器下使用手写板时调用的控件,使用前必须先注册,,不然浏览器下版本无法正常工作. ocx 控件在安装包运行时会自动注册,如果安装包没有注册成功,需要进行手动注 ...
- [转]C#开发ActiveX控件,.NET开发OCX控件案例
引自:百度 http://hi.baidu.com/yanzuoguang/blog/item/fe11974edf52873aaec3ab42.html 讲下什么是ActiveX控件,到底有什么 ...
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
开篇语:最近在弄ocx控件发布到asp.net网站上使用,就是用户在使用过程中,自动下载安装ocx控件.(此文章也是总结了网上好多人写的文章,我只是汇总一下,加上部分自己的东西,在这里感谢所有在网 ...
随机推荐
- ASP判断文件地址是否有效
<% Response.Write("<head><style><!--span{ font-size: 9pt }--></style> ...
- ###学习《C++ Primer》- 5
点击查看Evernote原文. // @author: gr // @date: 2014-10-20 // @email: forgerui@gmail.com Part 5: 动态内存(第12章) ...
- FreeMarker语法2
FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:<#-- ... -->格式部分,不会输 ...
- jquery的effect-color对easyui没效果.自己冒险写个边框的颜色闪烁.
"jquery-ui-effect-color.js" 是从jqueryui下载的color动画部分(自己改了个名字). 链接 <!DOCTYPE html> < ...
- hdu 1250 Hat's Fibonacci(高精度数)
// 继续大数,哎.. Problem Description A Fibonacci sequence is calculated by adding the previous two membe ...
- 九度OJ 1104 整除问题
题目地址:http://ac.jobdu.com/problem.php?pid=1104 题目描述: 给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除. 输入: 两个整数n(2 ...
- 菜鸟的MySQL学习笔记(一)
本学习笔记是照搬慕课网<与MySQL的零距离接触>内容,特此感谢! 1-1 mysql的安装与配置 Windows环境下的MSI安装: 1.安装: 双击MSI文件->用户协议-> ...
- 在Mac OS X中使用VIM开发STM32(3)
本文原创于http://www.cnblogs.com/humaoxiao,非法转载者请自重! 在上一篇文章中,我们安装了ctags插件,ctags能对我们的源代码文件中的元素建立索引表, ...
- TweenMax动画库学习(二)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) Tw ...
- CSS3的position:sticky介绍
用户的屏幕越来越大,而页面太宽的话会不宜阅读,所以绝大部分网站的主体宽度和之前相比没有太大的变化,于是浏览器中就有越来越多的空白区域,所以你可能注意到很多网站开始在滚动的时候让一部分内容保持可见,比如 ...