使用Jacob将Enum传递给COM库方法

时间:2012-06-25 14:52:06

标签: java com activex jacob

我实例化一个COM对象,然后调用一个方法。

ActiveXComponent comp = new ActiveXComponent("MyDll.MyClass");

String argument1 = "test1";
String argument2 = "test2";

Variant[] arguments = { new Variant(argument1), new Variant(argument2) };

comp.invoke("myMethod", arguments)

假设MyDll有一个名为

的方法
myMethod(String s1, String s2) 

它工作正常。

现在,如果我有一个方法

怎么办?
myMethod(String s1, ReturnDeletedModeEnum enum)

在MyDll中定义了枚举?

我需要以某种方式将枚举传递给方法,但我不知道如何访问它。

我尝试将Enum作为ActiveXComponent,

new ActiveXComponent("MyDll.ReturnDeletedModeEnum");

(毫不奇怪)不起作用:

com.jacob.com.ComFailException: Can't get object clsid from progid

我尝试了一些关于Jacob的文档,因为似乎有特定于Enum的类,但我没有找到关于如何使用它们的任何解释。

1 个答案:

答案 0 :(得分:0)

当我需要使用Enummeration参数调用方法时,我遇到了同样的不确定性。我找不到太多文档 - JACOB或其他。

我偶然发现了helpful post on the subject the values ... correspond to internally stored numbersAn enumeration in VBA is always of data type Long

有了这个和MS Documentation for my particular Enumeration,我试了一下......

Dispatch.call(oDocuments, "Open", fileIn, ... ,  new Variant(1L));

它有效!

我确定有办法实现"枚举"数据结构,但这对我来说已经足够了。