Jud*_*ngo 8 java swt activex ole com-interop
在我的Java SWT应用程序中,我正在托管第三方ActiveX控件.我正在使用OleClientSite来做到这一点.
// Ah, this works. :-)
OleAutomation comObject = new OleAutomation(...);
Run Code Online (Sandbox Code Playgroud)
我想从Java调用2个简单的函数.以下是COM函数定义:
[id(5)]
void easyFoo([in] int blah);
[id(20)]
void problemFoo([in] VARIANT floatArray);
Run Code Online (Sandbox Code Playgroud)
容易,对吗?这是我的假装代码:
// 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?]);
Run Code Online (Sandbox Code Playgroud)
问题出在最后一行:如何将float数组传递给第三方COM对象?救命!
您需要传递一个浮点数组。在 COM 术语中,这意味着vt 设置为 VT_R4|VT_ARRAY 的sa VARIANT 。变体数组可能不起作用,因为文档没有说它可以接受变体数组 (VT_VARIANT |VT_ARRAY)。在java中你应该能够使用float[]作为参数类型。如果没有,您始终可以调用 Windows API 来构造所需类型的安全数组。
| 归档时间: |
|
| 查看次数: |
1232 次 |
| 最近记录: |