问题描述
我正在使用 Jacob 在软件中调用 VBA COM 接口。 我需要调用一个具有输出参数的 Sub,该参数不是规范类型(int、String 等),而是在 .tlb 中声明的一些专用接口,这些接口随此软件一起提供。 这是
Sub GetMaterialOnBody (Body iBody,Material oMaterial)
所以我在调用中尝试了许多输出参数material的声明和初始化,我收到各种错误,似乎找不到正确的方法。
Variant material = new Variant (null,false);
dispatch.invoke(materialManager.getdispatch(),"GetMaterialOnBody",dispatch.Method,new Object[] {hybridBody,material},new int[1]);
但是得到了
com.jacob.com.ComFailException: A COM exception has been encountered:
At Invoke of: GetMaterialOnBody
Description: Type mismatch.
然后我尝试在 material
上调用 .getdispatch()Variant material = new Variant (null,material.getdispatch()},new int[1]);
但是得到了
java.lang.IllegalStateException: getdispatch() only legal on Variants of type Variantdispatch,not 0
所以我尝试了
Variant material = new Variant (null,false);
material.putnothing();
dispatch.invoke(materialManager.getdispatch(),new int[1]);
但是得到了
com.jacob.com.ComFailException: putObject Failed
at com.jacob.com.Variant.putvariantdispatch(Native Method) ~[jacob-1.14.3.jar:na]
at com.jacob.com.Variant.putdispatch(Variant.java:1341) ~[jacob-1.14.3.jar:na]
我尝试了不同的解决方案,包括使用 Ref 等。 我对我们必须如何初始化变体/调度以作为 Sub 中的输出参数传递的方式有点迷茫。
有人知道如何做到这一点吗?我发现的关闭资源是处理字符串/整数而不是对象。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)