Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C++;java中的库_Java_C++_Static Libraries - Fatal编程技术网

使用C++;java中的库

使用C++;java中的库,java,c++,static-libraries,Java,C++,Static Libraries,我是这个论坛的新手,所以如果我不能正确地提出我的问题,请原谅 我需要使用java中的C++(.lib和.h)文件的帮助 我想在java代码中使用.lib文件的方法 函数的原型如下所示: FunctionXYZ(BYTE *Data1, BYTE *Data2, BYTE *Data3, int Data4); 我将使用的环境是centOS 先谢谢你 注:我没有这个.lib的源代码。你可以使用JNI技术,它使你能够与本机代码进行互操作 请参考这个 使用JNI可能是最好的方法。如果你想阅读维基百科

我是这个论坛的新手,所以如果我不能正确地提出我的问题,请原谅

我需要使用
java
中的
C++(.lib和.h)
文件的帮助
我想在java代码中使用
.lib
文件的方法

函数的原型如下所示:

FunctionXYZ(BYTE *Data1, BYTE *Data2, BYTE *Data3, int Data4);
我将使用的环境是centOS

先谢谢你


注:我没有这个.lib的源代码。你可以使用JNI技术,它使你能够与本机代码进行互操作

请参考这个
使用JNI可能是最好的方法。如果你想阅读维基百科,这里有一个链接:


这是它的文档:

要使用
.lib
中的函数,必须为这些库函数创建函数,然后将它们与库链接到
.dll

示例:

> p>假设您在C++库头中有一个签名:

int example(int a, int b);
  • 在C++中创建函数包装器:

    JNIEXPORT jint JNICALL Java_MyClass_example (JNIEnv* env, jobject obj, jint a, jint b) {
        return (jint) example(a, b);
    }
    
  • 将库和包装器链接到DLL中

  • 使用本机方法创建Java类:

    public class MyClass {
        public native int example(int a, int b);
    }
    
  • 使用
    System.loadLibrary
    函数(或类似函数)加载DLL

  • 现在,您可以对
    MyClass

  • 你做过任何研究吗?是的,我做过,但没有找到合适的解决方案。我得到了在java中使用.dll的方法,但没有使用.libI的源代码。lib。我仍然可以创建jni包装器吗?你能给我任何帮助链接吗?你不需要
    库的源代码,因为lib只是一个包含函数实现的对象。链接库时,链接器会看到这些实现,并将它们链接到代码中使用它们的位置。请参阅编译器/链接器101和我的更新答案。非常感谢。我将继续使用您的指针,并询问是否需要任何澄清,但我没有找到任何传递字节指针的方法,因为传递指针是有效的,但毫无意义。可以将指针作为
    jint
    传递,但不能从Java中取消对它的引用(这意味着,它没有意义,应该只传递值)。