c++ - 没有源代码的 JNI (UnsatisfiedLinkError)

标签 c++ com java-native-interface unsatisfiedlinkerror

我需要通过 Java JNI 调用用 C++ 编写的 COM 对象。 我没有 COM 对象 API 的文档,所以我想知道是否有办法“查询”对象本身。 我有一个用 VBA 编写的示例,它调用 COM 对象上的一个函数,但是当我尝试使用 JNI native 方法复制相同的调用时,出现以下错误。 我假设我在其中一个参数类型或返回类型中犯了错误(VBA 没有定义返回类型)。

Exception in thread "main" java.lang.UnsatisfiedLinkError: MyWrapper.functionOne(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;)V
at MyWrapper.funtionOne(Native Method)
at MyWrapper.main(MyWrapper.java:22)

最佳答案

您不能通过 JNI 直接调用 COM 对象。 JNI 用于调用已使用 JNI 语法和对象声明的函数。

如果您想直接调用,则需要使用 Java Native Access(JNA) 库。它与 .Net P/Invoke 语法非常相似。

参见:https://github.com/twall/jna

关于c++ - 没有源代码的 JNI (UnsatisfiedLinkError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26864626/

相关文章:

c++ - 引发 QT QEvent::WindowActivate 事件

c++ - 如何显示不同文件夹中多个文件的系统上下文菜单?

java - JNI 检测到应用程序错误 : use of invalid jobject when calling NewObject for innerclass

java - Android Studio 重命名原生库

android - 我怎么知道我的 Android 设备是否支持 C 指令?

C++ 调用错误时没有匹配的函数

c++ - 如何在 Windows 上为 C/C++ 中的文件预先分配空间?

c# - 注册免费 COM 与 C# 互操作,可能吗?

c# - 从 .NET 附加到 COM 服务器中的事件时出现 E_ACCESSDENIED 异常

c++ - 为什么在 VB6 中 COM 接口(interface)名称被 coclass 名称替换?