c ref java_使用JNA将C数组返回给Java
我不太熟悉C,但我需要在我的
java代码中使用C库.我已经创建了DLL并且能够很好地访问它,但我试图从C代码返回一个int数组到java代码.
在C中,我认为你可以简单地返回一个指向数组的指针,但是它在我的Java代码中没有像我期望的那样工作.这是C代码:
int * getConusXY(double latitude, double longitude) {
maparam stcprm;
double reflat = 25, reflon = -95,
lat1 = 20.191999, lon1 = -121.54001,
x1 = 0, y1 = 0, x2 = 1073, y2 = 689,
gsize = 5.079, scaLat = 25, scaLon = -95, orient = 0;
double x, y;
int* xy;
xy = malloc(2 * sizeof *xy);
stlmbr(&stcprm, reflat, reflon);
stcm1p(&stcprm, x1, y1, lat1, lon1, scaLat, scaLon, gsize, orient);
cll2xy(&stcprm, latitude, longitude, &x, &y);
xy[0] = (int) x;
xy[1] = (int) y;
return xy;
}
如果我在C中测试这个
int* xy = getConusXY(33.92, -84.33);
cout << xy[0] << " " << xy[1] << endl;
然后它工作正常,我得到的值739,255像预期的那样.
我尝试在Java中使用它与JNA包这样(但这给了我739,-16777214):
public class DmapFDllLibrary {
interface DmapFLibrary extends Library {
DmapFLibrary INSTANCE = (DmapFLibrary) Native.loadLibrary("DmapFDll",
DmapFLibrary.class);
IntByReference getConusXY(double latitude, double longitude);
}
public static void main(String... strings) {
IntByReference xy_ref = DmapFLibrary.INSTANCE.getConusXY(33.92, -84.33);
Pointer p = xy_ref.getPointer();
System.out.println(p.getInt(0) + " " + p.getInt(1));
}
}
在JNA文档中,它表示原始数组(如int * buf)将映射到Java中的int [] buf,但是当我尝试将返回类型从IntByReference更改为int []时,我得到一个illegalArgumentException.
我不知道我是否正确地从C返回数组,或者我是不是在Java中正确访问它.任何帮助,将不胜感激.
c ref java_使用JNA将C数组返回给Java相关推荐
- java字符串拆分成数组_用Java实现JVM第八章《数组和字符串》
小傅哥 | https://bugstack.cn 沉淀.分享.成长,专注于原创专题案例,以最易学习编程的方式分享知识,让自己和他人都能有所收获.目前已完成的专题有:Netty4.x实战专题案例.用J ...
- c++ new 数组_用Java实现JVM第八章《数组和字符串》
案例介绍 本章主要介绍如何实现让虚拟机处理数组和字符串,在虚拟机功能增强后,我们可以执行数组类型计算和输出字符串.本章需要新增实现数组指令:newarray.anewarray.arraylength ...
- 【C 语言】一级指针 易犯错误 模型 ( 判定指针合法性 | 数组越界 | 不断修改指针变量值 | 函数中将栈内存数组返回 | 函数间接赋值形参操作 | 指针取值与自增操作 )
文章目录 一.判定指针合法性 二.数组越界 三.不断修改指针变量值 四.函数中将栈内存数组返回 五.函数间接赋值形参操作 六.指针取值与自增操作 一.判定指针合法性 判定指针合法性时 , 必须进行如下 ...
- Java-Runoob-高级教程-实例-数组:01. Java 实例 – 数组排序及元素查找
ylbtech-Java-Runoob-高级教程-实例-数组:01. Java 实例 – 数组排序及元素查找 1.返回顶部 1. Java 实例 - 数组排序及元素查找 Java 实例 以下实例演示 ...
- java如何给数组倒置_数组元素倒置-Java
导读热词 通过两个嵌套循环,实现将数组中的元素倒置.Java实现如下: package test; import java.util.Scanner; public class test15 { /* ...
- Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素-un
ylbtech-Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素 1.返回顶部 1. Java 实例 - 查找数组中的重复元素 Java 实例 以下实例 ...
- 数组的升序 java
数组的升序 java import java.util.Arrays;public class testone {public static void main(String[] args) {int ...
- 数组的遍历 java
数组的遍历 java public class testone {public static void main(String[] args) {int[] array = {1, 2, 3, 4, ...
- android js交互 数组,Android WebView —— Java 与 JavaScript 交互总结
相比于 Native App 和 Web App,Hybrid App 凭借其迭代灵活.控制自如.多端同步的优势在应用市场上越发显得优胜,主要得力于,其将变更频繁的部分产品功能使用 H5 开发并在客户 ...
最新文章
- 让你的输入框使用Google云语音输入技术
- C/C++ sizeof函数解析——解决sizeof求结构体大小的问题
- 【2556】传说中的数据结构 sdutOJ
- java - 朴素贝叶斯
- linux 磁盘挂载sde,linux lvm挂载新的硬盘并且扩容
- hdoj--1716--排列2(暴力水题)
- Tips--git bash管理本地文档的常用命令
- HAOI2011 Problem b 洛谷P2522
- 由于Web服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面(http error 404.2、iis、0x800704ec)...
- 1037u处理器搭载文件服务器,悦升IVB 赛扬1037U工控主板 满足多行业需求
- 黑科技 未来人们可用身体这7个部位来控制设备
- 牛头刨床设计matlab生成图片,牛头刨床matlab程序---机械原理课程设计
- 基于ssm柴犬主题咖啡厅系统
- 关于library cache lock
- 无线测温系统在高低压开关柜内的运行---安科瑞 顾城
- 斗兽棋在线游戏HTML5小游戏,js --斗兽棋游戏
- 高德地图API开发应用-----地图显示+定位+marker
- hdu 6441 (费马大定理+勾股数 数学)
- 等保三级,多级等保认证的一点了解
- 用最通俗的语言讲一讲,什么是阻抗匹配?
热门文章
- 两种电致发光器件EQE测量方法(光分布法和积分球法)
- springboot中怎么进行统一日志处理?
- 雷电模拟器桥接模式不显示网卡,4版本不能设置代理
- rails开发利器:视频播放插件plugin(如何开发一个简单的插件)
- linux 的常用命令---------第十阶段(虚拟机三种网络模式)
- 云服务器怎么换ip云服务器,云服务器换ip难不难?云服务器换IP的步骤
- javaEE核心框架之 Mybatis ( 一 )
- Win2003合并磁盘分区
- 大华摄像头网页端控制+web串口(适用任何浏览器,不能用来打我)通讯合集
- 浏览器:免费小说的“下一站”