有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用java调用C++ DLL

我正在用Java开发一个小应用程序。这是对现有MFC项目的重写。我需要更改现有的dll,以便使用JNI从Java访问。所有这些Java的东西对我来说都是新的,所以当我阅读其他论坛帖子时,我有点麻烦,感觉很闷。在现有的dll中,我有这样一个函数:

extern "C" __declspec(dllexport) bool Create()
{
     return TRUE;
}

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

我试过这个:

JNIEXPORT jboolean JNICALL Create()
{
     return TRUE;
}

我包括jni。一切都很好。然而,当我从Java调用它时,我得到了不满意的LinkError。我用这个从Java调用它:

public static native boolean CreateSession();

System.load("D:\\JavaCallTest.dll");
Create();

有人能帮我找到正确的方向吗?我真诚地感谢你的帮助

谢谢

尼克


共 (1) 个答案

  1. # 1 楼答案

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

    public class NativeCode {
        public static native boolean CreateSession();
    }
    

    类路径是(例如)com.example.NativeCode您可以用native声明您的方法,如下所示:

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

    所有JNI方法的前两个参数都是JNIEnv指针和类