gpt4 book ai didi

java - 使用 JNA 将 const char** 映射到 Java 类型

转载 作者:行者123 更新时间:2023-11-30 05:29:25 25 4
gpt4 key购买 nike

我正在尝试将 Java 中的 C++ 库与 JNA 结合使用。在库的头文件中,我有以下方法声明:

extern "C" void foo(const char** bar);

参数 bar 应该传递给空的 foofoo 将为其分配一个我想在 Java 中检索的值。应该如何设置相应的Java方法声明(例如,我应该将bar映射到什么Java类型),我该如何使用它?

我尝试了以下 Java 声明:

void foo(String bar);
void foo(String[] bar);
void foo(Pointer bar);

当我调用 foo 时,它们都会导致以下错误:

Exception in thread "main" java.lang.Error: Invalid memory access

最佳答案

在下面找到一个小片段。

libfoo.cpp

#include <stdio.h>
extern "C" void foo(const char** bar);

void foo(const char** bar) {
for (int i = 0; bar[i] != '\0'; i++) {
fprintf(stdout, "%s\n", bar[i]);
}
}

LibFooDemo.java

import com.sun.jna.Library;
import com.sun.jna.Native;

public class LibFooDemo {

public interface FooLibrary extends Library {
FooLibrary INSTANCE = (FooLibrary)
Native.loadLibrary("foo", FooLibrary.class);
void foo(String[] format);
}

public static void main(String[] args) {
String[] vals = {"foo", "bar", "foobar"};
FooLibrary.INSTANCE.foo(vals);
}
}

编译所有源

gcc -c -fPIC libfoo.cpp -o libfoo.o
gcc -shared -o libfoo.so libfoo.o
javac -cp jna-4.2.1.jar LibFooDemo.java

运行Java程序

java -Djava.library.path=. -cp jna-4.2.1.jar:. LibFooDemo

输出

foo
bar
foobar

关于java - 使用 JNA 将 const char** 映射到 Java 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36404556/

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