输入不匹配 JNA
Input Mismatch JNA
在使用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 链接的函数能够返回类类型?
相关文章:
- Qt SQLite没有查询或参数计数不匹配
- 模板参数推导失败,函数参数/参数不匹配
- 在使用累加时,C++中的运算符+不匹配
- C++ 与操作员不匹配<<
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 与'operator='不匹配(操作数类型'String'且"void")
- C++模板/别名 - 模板参数列表中参数 1 处的类型/值不匹配
- C4018:类内有符号、无符号不匹配
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- 为什么我收到错误:"运算符<<不匹配?
- RE2 不匹配非 ASCII 字符
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- 模板推导:为什么函数指针模板定义在常量和/或引用时不匹配?
- 错误:"模板<类_Tp,类_Dp>类 std::unique_ptr"的模板参数列表中参数 1 的类型/值不匹配
- OpenSSL fips in C++ wrapper Library 如何?错误:指纹不匹配
- 为什么我的数组值与此处的全局变量不匹配?
- 引号之间匹配/不匹配,带有不可避免的引号和多行
- 映射迭代器与运算符不匹配
- C++调用和定义不匹配
- 输入不匹配 JNA