Ich habe eine Windows -Software installiert, die ein Komponentenmodellobjekt hat. Der COM liefert eine Funktion: < /p>
Code: Select all
long GetValue(VARIANT* v, short a, short b, [optional] VARIANT d, [optional] VARIANT e);
Es gibt ein C# -Beispiel. Ich muss es mit Kotlin umstellen. < /P>
Code: Select all
object valOutput = null;
short a = 1;
short b = 101;
string c = "0";
string d = "m";
o.GetValue(ref valOutput, a, b, c, d);
< /code>
Problem: < /p>
Ich verwende JNA und Kotlin, um das C# -Beispiel neu zu refaktor. Alles funktioniert, bis ich die Funktion "getValue" nenne.val valOutput = Variant.VARIANT()
val a = 1
val b = 101
val c = "0"
val d = "m"
o.GetValue(valOutput, a.toShort(), b.toShort(), c, d)
< /code>
Ich habe eine Ausnahme erhalten: < /p>
com.sun.jna.platform.win32.COM.COMInvokeException: 类型不匹配。(HRESULT: 80020005) (puArgErr=4)
at com.sun.jna.platform.win32.COM.COMUtils.checkRC(COMUtils.java:187)
at com.sun.jna.platform.win32.COM.util.ProxyObject.oleMethod(ProxyObject.java:736)
at com.sun.jna.platform.win32.COM.util.ProxyObject.invokeMethod(ProxyObject.java:450)
at com.sun.jna.platform.win32.COM.util.ProxyObject.invoke(ProxyObject.java:256)
at com.sun.proxy.$Proxy26.GetValueEx(Unknown Source)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at com.sun.jna.platform.win32.COM.util.Factory$ProxyObject2$1.call(Factory.java:98)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:205)
at com.sun.jna.platform.win32.COM.util.ComThread.execute(ComThread.java:155)
at com.sun.jna.platform.win32.COM.util.Factory.runInComThread(Factory.java:172)
at com.sun.jna.platform.win32.COM.util.Factory.access$100(Factory.java:56)
at com.sun.jna.platform.win32.COM.util.Factory$ProxyObject2.invoke(Factory.java:95)
...
< /code>
Was bedeutet die Ausnahme? Wie kann ich es beheben?val valOutput = Variant.VARIANT.ByReference()
o.GetValue(valOutput, a.toShort(), b.toShort(), c, d)