Java JNA UCHAR 和 PUCHAR

2024-01-23

我正在寻找一个Java字符串'WLANHostedNetworkSetSecondaryKey' and 'WLAN 托管网络设置属性'。一个想要一个带有 CHAR[] 的结构内的结构,第一个想要一个 PUCHAR。我尝试使用字符串、char[]、byte[] 和内存,但他们会继续给我带来同样的错误(首先是错误的参数或错误的配置文件)。有什么办法可以用 JNA 进行更多调试(可能不是:()? 我也无法在任何地方读取所使用的字符编码,除非它不是 ANSI。任何帮助都会很棒!

        * DWORD WINAPI WlanHostedNetworkSetSecondaryKey(
        __in        HANDLE hClientHandle,
        __in        DWORD dwKeyLength,
        __in        PUCHAR pucKeyData,
        __in        BOOL bIsPassPhrase,
        __in        BOOL bPersistent,
        __out_opt   PWLAN_HOSTED_NETWORK_REASON pFailReason,
        __reserved  PVOID pvReserved


     * DWORD WINAPI WlanHostedNetworkSetProperty(
        __in        HANDLE hClientHandle,
        __in        WLAN_HOSTED_NETWORK_OPCODE OpCode,
        __in        DWORD dwDataSize,
        __in        PVOID pvData,
        __out_opt   PWLAN_HOSTED_NETWORK_REASON pFailReason,
        __reserved  PVOID pvReserved
        );

有关这方面的大多数文档

http://msdn.microsoft.com/en-us/library/dd439496(v=VS.85).aspx http://msdn.microsoft.com/en-us/library/dd439496(v=VS.85).aspx

http://jna.java.net/javadoc/overview-summary.html#pointers http://jna.java.net/javadoc/overview-summary.html#pointers

http://en.wikipedia.org/wiki/Java_Native_Access http://en.wikipedia.org/wiki/Java_Native_Access

以下评论:

   String buffer = "test";
   ByteBuffer buf = ByteBuffer.allocateDirect(buffer.length()); buf.put(buffer.getBytes()); 
   Pointer pucKeyData = Native.getDirectBufferPointer(buf);

   System.out.println(
           CLibrary.INSTANCE.WlanHostedNetworkSetSecondaryKey(handle.getValue(), 5, pucKeyData, 0, 0, reason, reserved));

我正在重新表述我到目前为止所发表的评论(加上一些更正):

UCHAR被定义为 C 宏u_byte这是一个unsigned byte。但是,在 Java 中,我们没有unsigned byte类型,只是一个有符号的字节byte类型。别担心,获得一个unsigned byte在Java中,我们使用这个技巧:((int)mybyte & 0xFF)

PUCHAR被定义为 C 宏POINTER(u_byte)这是一个 C 指针,unsigned byte *指向无符号字节数组。原因是有一个动态数组。

但是,如果你使用byte[] or char[] in JNA Structure,JNA会抱怨,Array fields must be initialized for 未初始化的 byte[] or char[]场地。就你而言,它违背了拥有的目的dwKeyLength定义动态无符号字节数组大小的字段pucKeyData.

正确的 JNA 类型pucKeyData is Pointer。但是,您需要找到一种方法来为其分配一个数组Pointer字段为pucKeyData字段基于给定的大小dwKeyLength长度在WLANHostedNetworkSetSecondaryKey结构。

将已初始化的无符号字节数组分配给Pointer,我们需要直接使用ByteBuffer。请记住在使用后手动释放此直接缓冲区,因为它不再由 Java GC 管理...

String buffer = "1234567890";
DWORD dwKeyLength = new DWORD(buffer.length());
ByteBuffer buf = ByteBuffer.allocateDirect(dwKeyLength.intValue()); 
buf.put(buffer.getBytes()); 
Pointer pucKeyData = Native.getDirectBufferPointer(buf);

System.out.println("pucKeyData data:" + pucKeyData.getString(0));

buf = null;
pucKeyData = null;

如果您从 JNA 异常中获得错误参数,则意味着您的 JNA 方法的一个或多个参数使用了不正确的数据类型。

JNA 提供了一些 WinDef 类类型,例如DWORD。但有一些 WinDef 类型,例如PUCHAR不包括在内。但是,要将整数值分配给DWORD输入并检索它,你需要这样做:

DWORD dwKeyLength = new DWORD(5);
System.out.println("dwKeyLength integer value: " + dwKeyLength.intValue());

注:本文基于JNA平台版本3.3.0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java JNA UCHAR 和 PUCHAR 的相关文章

随机推荐

  • 如何获取张量的值? Python

    在进行一些计算时 我最终计算出average acc 当我尝试打印它时 它输出 tf Tensor 0 982349 shape dtype float32 我如何获得0 98 它的值并将其用作普通浮点数 我想做的是将其中的一堆放在一个数组
  • 为什么标准输出不能被替换?

    出于教育目的 我尝试替换标准流 stdout stdin 和 stderr 我首先查找流的数据类型 我追溯到具有以下成员的 struct IO FILE gdb ptype IO FILE type struct IO FILE int f
  • FreeMarker 模板错误:以下内容已计算为 null 或缺失 |但事实并非如此

    我面临的错误是如此奇怪 一切看起来都很好 但是当浏览器向服务器发送 GET 请求时 我收到此错误 我想做的实际上是捕获 HTTP 参数 将它们保存在发送到 Freemarker 模板的 ArrayList 中保存的对象中 请你帮助我好吗 多
  • 计算 CRC 初始值而不是将 CRC 附加到有效负载

    我实现的大部分 CRC 都是追加计算出的 CRC 值到消息 有效负载 并在所有字节 包括 之后在接收器处检查零结果 CRC 值通过 CRC 寄存器输入 显然这是一个相当标准的方法 现在我想使用不同的方法 根据有效负载计算一个值 使用该值作为
  • 创建一个接受 POST 和 GET 的 Jax-RS RESTful 服务?

    我正在将现有的一项服务转变为 RESTful 并且我已经掌握了使用 RestEasy 的基本功能 我的一些客户端应用程序应该能够对多个服务执行 GET 和 POST 请求 我只是在寻找是否有任何简单的方法可以绕过 jax rs 来指定 AP
  • 我应该从 getFft 看到什么样的输出?

    好吧 我正在努力创建一个 Android 音频可视化应用程序 问题是 我从 getFft 方法中得到的结果与谷歌所说的它应该产生的结果不一致 我一直追溯到 C 源代码 但我对 C 或 FFT 不够熟悉 无法真正理解正在发生的事情 我将尝试包
  • sifr3 - 预取不起作用?

    我在启用 sifr 3 的网站的加载时间 大小方面遇到问题 并发现在我的应用程序中多次请求字体 swf 这可以在 firebug 的网络选项卡以及 apache 日志中看到 On http novemberborn net flash pr
  • 如何在Castle.DynamicProxy中使用IInterceptor?

    我写了一个这样的例子 简单计算器类 public class Calculator public int Add int a int b return a b 实现了DynamicProxy提供的 IInterceptor Serializ
  • 为什么“reset_index(drop=True)”函数会意外删除列?

    我有一个名为的 Pandas 数据框数据匹配 它包含 worker id unit id 和 caption 列 请参阅随附的屏幕截图 了解此数据框中的某些行 假设索引列不是按升序排列 我希望索引为 0 1 2 3 4 n 并且我希望它按升
  • 在 PubNub Swift 中访问 PNMessageResult

    请参阅此链接 http www pubnub com blog realtime ios apps getting started with swift and pubnub 基于以下功能我能够收到响应 func client client
  • Java MySQL 更新查询

    我收到错误 无法发出数据 这里是SSCCE package mysqltest import java awt import java awt event import javax swing import java applet Appl
  • 使用 Angular 5 分析 asp.net core 2(Web api)

    我正在寻找以下环境的分析解决方案 有人可以建议吗 net471 上的 ASP NET Core 2 实体框架 6 2 0 角度 5 0 0 我调查了迷你分析器 Glimpse Glimpse 尚未升级至 Core 2 0 MiniProfi
  • 实现最快运行时间的算法(问题、解决)

    对于算法竞赛训练 不是家庭作业 我们在过去一年中收到了这个问题 将其发布到此站点是因为其他站点需要登录 这就是问题 http pastehtml com view c5nhqhdcw html http pastehtml com view
  • 如何使用 NodeJS 创建流 API

    您将如何创建一个流 APINode http nodejs org 就像Twitter 流媒体 API http apiwiki twitter com Streaming API Documentation 我最终想做的是从FriendF
  • 如何克隆 Date 对象?

    分配一个Date变量到另一个变量会将引用复制到同一实例 这意味着改变一个就会改变另一个 我怎样才能真正克隆或复制Date实例 Use the Date https developer mozilla org en Core JavaScri
  • flutter android main 函数被调用两次

    在我的 flutter 应用程序中 我注意到 main 函数执行了两次 我正在使用计数器应用程序中的示例代码 文本main function被打印两次 我的 AndroidManifest xml 如下
  • 更改前缀后 npm 没有响应

    我最近尝试通过 npm 更新 IONIC CLI 安装成功了几次 但 CLI 版本没有改变 经过研究 我决定更改 npm 前缀 然后 IONIC strated 抛出 bash IONIC 命令未找到 然后我做了进一步的研究 之后我通过 w
  • “强制停止”将 Activity 留在其生命周期的哪个位置?

    假设我的应用程序已启动并正在运行 然后我进入我的设备主屏幕 导航设置 gt gt 应用程序 gt gt 管理应用程序 选择我的应用程序 然后按Force stop Which Activity下次打开应用程序时会调用方法吗 在我因不检查自己
  • 无法保持对 Selenium Python 驱动程序中元素的关注

    我试图通过 python 控制网络来运行脚本并下载相应的 csv 文件 以下是网页的外观 其中包含仪表板菜单 可单击 搜索 其他按钮 单击 搜索 按钮后 它会显示一个 搜索 文本框 可以在其中输入代码并按 Enter 键运行 现在我需要找到
  • Java JNA UCHAR 和 PUCHAR

    我正在寻找一个Java字符串 WLANHostedNetworkSetSecondaryKey and WLAN 托管网络设置属性 一个想要一个带有 CHAR 的结构内的结构 第一个想要一个 PUCHAR 我尝试使用字符串 char byt