输入不匹配 JNA

Input Mismatch JNA

本文关键字:JNA 不匹配 输入      更新时间:2023-10-16

在使用JNA的过程中,我遇到了一个非常奇怪的问题。 这是我C++代码。-- 为简单起见而减少 --

#include <iostream>
extern "C" std::string func(int, int, int, double*, double*);
std::string func(int a, int b, int c, double* data1, double* data2) {
std::cout << a << std::endl;
std::cout << b << std::endl;
std::cout << c << std::endl;
return "Finished";
}

下面是 Java 类:

class CLibOperator {
interface CLib extends Library {
CLib INSTANCE = 
(CLib) Native.loadLibrary("libFile.so", CLib.class);
String func(int a, int b, int c, double[] data1, double[] data2);
}
public static void main(String[] args) {
double[] d1 = {10,20,30};
double[] d2 = {111,222,333,444,555,666,777};
CLib.INSTANCE.func(1, 2, 3, d1, d2);
}
}

但是,C 函数的输出是:

2
3
3856103913

我期望的是:

1
2
3

似乎第一个论点被完全忽略了。关于如何解决这个问题的任何想法?

您正在尝试从指定了 C 链接的函数返回std::string(extern "C")。我很惊讶你的编译器没有向你抱怨这一点。当按值返回结构或类时,编译器(当然,取决于编译器及其使用的 ABI)通常会生成代码,该代码本质上等于将结构作为作为参数传递给函数的指针传递给调用方。

将返回类型更改为const char *

extern "C" const char *func(int, int, int, double *, double *);

您可能还有兴趣阅读: 具有 C 链接的函数能够返回类类型?