gpt4 book ai didi

java - 输入不匹配 JNA

转载 作者:行者123 更新时间:2023-11-28 05:08:33 25 4
gpt4 key购买 nike

在使用 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 *);

您可能也有兴趣阅读:Functions with C linkage able to return class type?

关于java - 输入不匹配 JNA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44027920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com