如何使用 Jacob 声明变量以将输出作为 Sub 参数

问题描述

我正在使用 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 (将#修改为@)