gpt4 book ai didi

java - JNI 从一个类的两个 DLL 中读取

转载 作者:行者123 更新时间:2023-11-30 09:22:40 24 4
gpt4 key购买 nike

我有两个 DLL:一个 directx dll,它导出 GetNativeBuffer,一个 opengl dll,它做同样的事情。

我使用以下 Java 类调用 GetNativeBuffer,从加载的 dll 中读取图像。

class DllLoader {

private ByteBuffer Buffer = null;
private BufferedImage Image = null;
public boolean LibraryLoaded = false;

private static native void GetNativeBuffer(IntBuffer Buffer);
private int ByteSize = 0, Width = 0, Height = 0;

public DllLoader(ByteBuffer Buffer, int ImageWidth, int ImageHeight) {
this.Buffer = Buffer;
}
}

问题:如果程序加载了两个 DLL,我如何指定从哪个 DLL 读取? 我必须上两个单独的课吗?我是否必须重命名函数并具有两个 native 函数?

最佳答案

您应该创建两个类,每个类对应一个 DLL。如果您以相同的方式命名您的 java 类,将它们分成不同的子包可能会更容易,例如:

package com.stackoverflow.jni.opengl;

/*
* GENERATE HEADER FILE FROM GENERATED CLASS AS NEEDED VIA
* javah com.stackoverflow.jni.opengl.NativeClazz
*/
public class NativeClazz {

/**
* Load C++ Library
*/
static {
// Always fun to do this in a static block!
System.loadLibrary("OpenGL");
}

private static native void GetNativeBuffer(IntBuffer Buffer);
}

package com.stackoverflow.jni.directx;

/*
* GENERATE HEADER FILE FROM GENERATED CLASS AS NEEDED VIA
* javah com.stackoverflow.jni.directx.NativeClazz
*/
public class NativeClazz {

/**
* Load C++ Library
*/
static {
// Always fun to do this in a static block!
System.loadLibrary("DirectX");
}

private static native void GetNativeBuffer(IntBuffer Buffer);
}

我个人的偏好是让任何包含 JNI 方法的类“仅实用”(私有(private)构造函数),让它们保持精简和平均(除非必要,否则没有内部变量)并通过函数调用参数在 bean 中来回传输数据。

关于java - JNI 从一个类的两个 DLL 中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16402581/

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