Фон и среда: < /p>
У меня установлено программное обеспечение Windows, которое имеет объект модели компонента. COM предоставляет функцию: < /p>
long GetValue(VARIANT* v, short a, short b, [optional] VARIANT d, [optional] VARIANT e);
Я получил информацию о подписи функции с помощью инструмента oleview.exe .
Существует пример C#. Мне нужно рефакторировать его в Котлин. < /P>
object valOutput = null;
short a = 1;
short b = 101;
string c = "0";
string d = "m";
o.GetValue(ref valOutput, a, b, c, d);
< /code>
Проблема: < /p>
Я использую JNA и Kotlin для рефакторирования примера C#. Все работает до тех пор, пока я не позвоню в функцию «getValue».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>
Я получил исключение: < /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>
Что означает исключение? Как это исправить?val valOutput = Variant.VARIANT.ByReference()
o.GetValue(valOutput, a.toShort(), b.toShort(), c, d)
Подробнее здесь: https://stackoverflow.com/questions/797 ... -using-jna