java - 使用 Jacob 将枚举传递给 COM 库方法

标签 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 中定义的枚举?

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

我尝试将枚举作为 ActiveXComponent,

new ActiveXComponent("MyDll.ReturnDeletedModeEnum");

哪个(毫不奇怪)不起作用:

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

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

最佳答案

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

我确实偶然发现了 helpful post on the subject其中表示 值 ... 对应于内部存储的数字VBA 中的枚举始终是 Long 数据类型

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

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

成功了!

我确信有一种方法可以获得实际的“枚举”数据结构,但这对我来说已经足够了。

关于java - 使用 Jacob 将枚举传递给 COM 库方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11191674/

相关文章:

.net - 为什么使用 DirectoryEntry 对 LDAP 进行身份验证会间歇性地抛出 COMException (0x8007203A) : "The server is not operational"?

c++ - 如何使用 IMoniker 和 IStream 接口(interface)从交换服务器异步读取

c++ - 为 ActiveX 控件编写包装类

java - QueryParameterException 即使一切似乎都被正确命名

java - 如何从与模式匹配的字符串中提取匹配的子字符串?

java - Hibernate 与 Spring Boot 和 Kotlin 急切加载整个对象图

c# - 从 C++ 调用 C#,C# 命名空间中的 "."有困难

activex - 如何检查 ActiveX dll 是否已注册?

delphi - ActiveX 不引发 EOleException

java - 无法在 Oracle 数据源连接中将自动提交值设置为 false