【发布时间】:2009-08-20 04:09:02
【问题描述】:
在我的 Java SWT 应用程序中,我托管了一个第 3 方 ActiveX 控件。我正在使用 OleClientSite 来执行此操作。
// Ah, this works. :-)
OleAutomation comObject = new OleAutomation(...);
我想从 Java 调用 2 个简单的小函数。以下是 COM 函数定义:
[id(5)]
void easyFoo([in] int blah);
[id(20)]
void problemFoo([in] VARIANT floatArray);
很简单,对吧?这是我的伪装代码:
// Ah, this works. :-)
OleAutomation comObject = new OleAutomation("Some3rdPartyControlHere");
// Call easyFoo(42). This works. :-)
int easyFooId = 5;
comObject.invoke(easyFooId, new Variant[] { new Variant(42) });
// Call problemFoo(new float[] { 4.2, 7.0 }). This doesn't work. :-(
int problemFooId = 20;
comObject.invoke(problemFooId, [ACK! What goes here?]);
问题出在最后一行:如何将浮点数组传递给第 3 方 COM 对象?帮助!
【问题讨论】:
-
感谢您的反馈。我刚刚添加了一条评论,解释了我对 SAFEARRAY 的发现(以及我未发现的)。
-
刚刚添加了另一个对操纵
SAFEARRAY的Java 项目的引用。可能会有所帮助。 -
@Judah:'
VARIANT' 的问题在于它可能是任何东西。不过,如果是 SAFEARRAY,您是否查看过 j-integra.intrinsyc.com/support/com/doc/types/index.html 和 j-integra.intrinsyc.com/support/kb/Article.aspx?id=30430?
标签: java activex swt com-interop ole