环境:win10专业版(64bit);eclipse_luna(64bit);jdk1.8.0_77(32bit)
操作步骤:
1、注册com组件到windows (提示成功,且注册表中存在com对应的ID);
2、在java工程中添加jacob.jar,
并设置jre的native
;
3、编码:
public int init() {
try {
System.out.println("启动进程...");
//ComThread.InitMTA(true);
com = new ActiveXComponent("YinHai.ChenDu.Interface");
ComThread.startMainSTA();
//ComThread.Release();
return 0;
} catch (Exception e) {
System.out.println("转换进程启动失败:" + e);
}
public void test(){
Long lon = new Long(0);
String msg = "";
Variant v1 = new Variant(lon,true);//输出参数定义,必须这样,否则得不到输出参数的值
Variant v2 = new Variant(msg,true);//输出参数定义,必须这样,否则得不到输出参数的值
Variant v3=new Variant();//返回值定义
try {
dispatch = com.getObject();
Dispatch.call(dispatch, "yh_interface_init",v1,v2);
} catch (Exception e) {
// TODO: handle exception
}
System.out.println(v3);
}
return -1;
}
public static void main(String[] args) throws Exception {
try {
EnvironmentControl environmentControl = new EnvironmentControl();
int init = environmentControl.init();
System.out.println(init);
environmentControl.test();
} catch (Exception e) {
System.out.println("Exception");
e.printStackTrace();
// TODO: handle exception
}
}
4、注明:执行初始化方法是成功的,然后执行Dispatch.call(dispatch, "yh_interface_init",v1,v2);时程序就不再往下执行了。debug模式下可以看到程序中止:
dll里面的yh_interface_init接口是这么定义的: function yh_interface_init(out aint_appcode: ^Variant; out astr_appmsg: ^Variant); stdcall;