在与JNA合作时,我出现了一个非常奇怪的问题。 这是我的C ++代码。 - 简化简化 -
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);
}
}
这是Java类:
2
3
3856103913
然而,C函数的输出是:
1
2
3
我的期望是:
{{1}}
似乎第一个论点被完全忽略了。有关如何解决此问题的任何想法?
答案 0 :(得分:1)
您尝试从指定了C-linkage(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?