gpt4 book ai didi

java - 如何从 Java 访问 C++ 库 (DLL) 的方法

转载 作者:搜寻专家 更新时间:2023-11-01 03:08:25 27 4
gpt4 key购买 nike

我有一个用 C++ 编写的库(实际上是一个 Firefox 插件,xyz.dll),我需要从 Java 访问它的方法。

public class AccessLibrary {
public interface Kernel32 extends Library {
public void showVersion();
}

public static void main(String[] args) {
Kernel32 lib = (Kernel32) Native.loadLibrary("xyz.dll", Kernel32.class);
lib.showVersion();
}
}

执行时出现如下错误:

java -jar dist/accessLibrary.jar
Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'showVersion': The specified procedure could not be found.

在原生库源码中,方法是这样定义的

void CPlugin::showVersion() {
/* ... */
}

我是 Java 的新手。可能是我缺少一些基本的东西。调查了类似的问题,但没有一个能解决我的问题。

忘了说我使用的是 Windows 7 64 位和 Java 7。

最佳答案

首先,您不能导出一个类方法并将其加载到 java 中。该名称将被破坏,java 将不知道如何正确调用它。您需要做的是将其单独分解成一个单独的函数。

之后:

正如已经指出的那样,确保导出函数。您可以使用两种方式之一导出。第一个就是提到的,就是使用__declspec(dllexport)。第二种是放到def文件中。

此外,确保将其标记为 extern "C"否则名称将被破坏。所有详细信息都在这里:Exporting functions from a DLL with dllexport

所以签名应该是这样的:

extern "C" __declspec(dllexport) void showVersion () {
}

最后,依赖工具可以在这里下载:http://www.dependencywalker.com/

关于java - 如何从 Java 访问 C++ 库 (DLL) 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14706193/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com