日期:2014-05-19  浏览次数:20687 次

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();