import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.DispatchEvents;
import com.jacob.com.Variant;
import java.io.IOException;
public class ocx {
public ocx() {
ComThread.InitMTA(true);
ActiveXComponent iTunesCom = new ActiveXComponent("clsid:287B48B3-80CA-4D0A-AE8E-F97A824FF279");
Dispatch testOcx = (Dispatch)iTunesCom.getObject();
Dispatch.call(testOcx, "BaseConnect",new Variant("COM3"),new Variant("1,3-5"));
Dispatch.call(testOcx, "VoteNew");
Dispatch.call(testOcx, "VoteMode",new Variant("5"),new Variant("1,4,1"));
Dispatch.call(testOcx, "VoteStart");
DispatchEvents events = new DispatchEvents(testOcx, new KeyVoteA());
try {
System.in.read();
} catch (IOException e) {}
ComThread.Release();
System.exit(0);
}

public class KeyVoteA {
//ocx事件返回给java类参数取得
public void KeyVote(Variant[] args) {
         System.out.println("args[0][   "+args[0].getInt());
         System.out.println("args[1][   "+args[1].getInt());
         System.out.println("args[2][   "+args[2].getString());
   }
}

public static void main(String args[]) throws Exception {
    ocx test = new ocx();
}
}

解决方案 »

  1.   

    DispatchEvents events = new DispatchEvents(testOcx, new KeyVoteA());
    //ocx事件返回给java类参数取得
    public void KeyVote(Variant[] args) {
             System.out.println("args[0][   "+args[0].getInt());
             System.out.println("args[1][   "+args[1].getInt());
             System.out.println("args[2][   "+args[2].getString());
       }
    理解红色字体即可
      

  2.   

    可能与dll的调法差不多,编译生成存根,代理。也可以用OBJECT classid="clsid:CAFEEFAC-0015-0000-0007-ABCDEFFEDCBA>这种方式调用
      

  3.   

    jacob监听连续9次事件就监听不到了,要等返回之后一段时间才可以继续返回,是肿么一回事啊
      

  4.   

    楼上大神是怎么监听的?可以贴demo代码不?
      

  5.   

    兄弟,我也不会,没做出来,后来放弃了,这得需要JAVA开发和OCX开发工程师之间共同开发联调测试,不然的话,不匹配的不支持的永远也做不出来。