我在让 JNA 全部解决时遇到问题。我正在尝试调用一个函数,该函数将函数和const char*. 我的 C 代码如下所示:
typedef void (*example_ptr)(const char*);
void exampleMethod(const char* value)
{
printf("This is the string: %s\n", value);
}
void example_triggerCallback(const example_ptr func, const char* str) {
printf("provided str: %s", str);
func(str);
}
为了实现这一点,我用 Java 编写了这样的 JNA 包装器
public class Main {
public interface TestLibrary extends Library {
TestLibrary INSTANCE = (TestLibrary)
Native.loadLibrary("libtest",
TestLibrary.class);
interface ExampleCallback extends Callback {
void invoke(String str);
}
class ExampleCallbackImpl implements ExampleCallback {
public void invoke(String str) {
System.out.println("example: " + str);
}
}
void example_triggerCallback(ExampleCallback callback, String str);
}
public static void main(String[] args) {
TestLibrary testLibrary = TestLibrary.INSTANCE;
final TestLibrary.ExampleCallbackImpl callback = new TestLibrary.ExampleCallbackImpl();
testLibrary.example_triggerCallback(callback, "testiddy test test");
}
}
我现在面临的问题是,printf在example_triggerCallbackC代码其实是在正打来电话,我得到的输出Java控制台上,但什么我真的想在这里实现的是,我想从Java传递侧指针为exampleMethod从C 所以它会打印通过的String. 现在func(str)好像被忽略了。我在这里缺少什么?
喵喔喔
相关分类