如何解决在Java类中使用启用JNI的Lib
我已经使用JNI编译了本机DLL的包装。 现在,我想在我的应用程序中使用该库,但是我不知道如何访问该库的功能。
我使用:
public class JNIViie {
private JFrame frame;
static {
System.loadLibrary("MySDK");
}
/**
* Launch the application.
*/
public static void main(String[] args) {
String mkey = "1234";
String out = stringFromJNI(mkey);
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
JNIViie window = new JNIViie();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public JNIViie() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100,100,450,300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public native String stringFromJNI(String mkey);
}
我用CMake创建的JNI库是: cpp文件
//
// Created by ingo on 31.03.20.
//
#include "MySDK.h"
#include <tchar.h>
#include <jni.h>
#include <string>
MySDK::MySDK (const TCHAR * licensekey){
int32 res = ::Initialize(licensekey,BS_ASPI_INTERNAL,BS_TRUE);
//int32 res = ::CheckLicenseKey(licensekey);
}
std::string MySDK::driveList() {
int32 res = ::RescanDevices();
std::string mydrives;
TCHAR chListDevices[26][50];
int32 nUsed = 0;
res = ::GetDevices(chListDevices,&nUsed,false);
if (BS_SDK_ERROR_NO == res) {
for (int i = 0; i < nUsed; i++) {
mydrives.append(chListDevices[i]);
mydrives.append(" | ");
}
}
return mydrives;
}
MySDK::~MySDK() {
}
static MySDK *example = NULL;
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_mysdk_MainActivity_stringFromJNI(
JNIEnv* env,jobject thiz,jstring lkey){
const TCHAR *licenceKey = env->GetStringUTFChars(lkey,JNI_FALSE);
//const TCHAR *licenceKey = "1234";
example = new MySDK(licenceKey);
env->ReleaseStringUTFChars(lkey,licenceKey);
std::string hello = "Hello from ingo";
return env->NewStringUTF(hello.c_str());
}
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_mysdk_MainActivity_drivelist(
JNIEnv* env,jobject thiz
){
std::string drives= example->driveList();
return env->NewStringUTF(drives.c_str());
}
头文件
//
// Created by ingo on 31.03.20.
//
#ifndef MYSDK_MYSDK_H
#define MYSDK_MYSDK_H
#include <string>
class MySDK {
public:
MySDK(const TCHAR * licensekey);
~MySDK();
std::string driveList();
};
#endif //MYSDK_MYSDK_H
始终未知stringFromJNI(mkey);
。我确定我错过了要添加的内容,但是我想我需要帮助才能知道我错过了什么。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。