从Java调用C++ DLL

nic*_*ity 10 java dll java-native-interface

我正在使用Java作为一个小应用程序.它是对现有MFC项目的重写.我需要更改现有的dll以使用JNI从Java启用访问.所有这些Java的东西对我来说都是新的,所以当我阅读其他论坛帖子时,我遇到了一些麻烦并且感觉相当密集.在现有的DLL中我有这样的函数:

extern "C" __declspec(dllexport) bool Create()
{
     return TRUE;
}
Run Code Online (Sandbox Code Playgroud)

愚蠢的提问时间.如何正确设置它以供Java调用?

我试过这个:

JNIEXPORT jboolean JNICALL Create()
{
     return TRUE;
}
Run Code Online (Sandbox Code Playgroud)

我包括jni.h,一切都很好.但是,当我从Java调用它时,我得到UnsatisfiedLinkError.我是用Java调用它的:

public static native boolean CreateSession();

System.load("D:\\JavaCallTest.dll");
Create();
Run Code Online (Sandbox Code Playgroud)

有人可以向我推动正确的方向吗?我真诚地感谢任何帮助.

谢谢,

缺口

Goo*_*bus 7

您需要在本机代码中包含Java类名称和路径,例如,如果您的本机方法在Java中声明为:

public class NativeCode {
    public static native boolean CreateSession();
}
Run Code Online (Sandbox Code Playgroud)

并且类路径是(例如)com.example.NativeCode您将在本机中声明您的方法,如下所示:

extern "C"
JNIEXPORT jboolean JNICALL Java_com_example_NativeCode_CreateSession(JniEnv* env, jclass clazz)
{
    return JNI_TRUE;
}
Run Code Online (Sandbox Code Playgroud)

所有JNI方法都有一个JNIEnv指针和类作为它们的前两个参数.