为了账号安全,请及时绑定邮箱和手机立即绑定

结构 JNA 返回错误值

结构 JNA 返回错误值

慕妹3146593 2023-06-21 16:16:09
从 C++ 代码中我得到了结构。但是我得到的所有值都是默认值。下面是我的 C++ 代码extern "C" { PDFCONTENTDATA GetPDFContentData(LPTSTR lptszS3FileURL){PDFCONTENTDATA pdfContentData;pdfContentData.m_uiRasterDPI = 100;return pdfContentData;}}; 下面是我的 java/scala 代码@Structure.FieldOrder({ "m_uiRasterDPI"})public class tagPDFContentData extends Structure {    public static class ByValue extends tagPDFContentData implements Structure.ByValue { }    public static class ByReference extends tagPDFContentData implements Structure.ByReference { }    public volatile int m_uiRasterDPI;}trait CDocuLinkCoreServices extends Library{  def GetPDFContentData(value: Pointer):  tagPDFContentData.ByValue}但我越来越m_uiRasterDPI=0它应该返回 100。
查看完整描述

1 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

package recipeNo057;


import com.sun.jna.Library;

import com.sun.jna.WString;

import com.sun.jna.Native;

import com.sun.jna.Structure;


@Structure.FieldOrder({ "field" })

public class Data extends Structure {


    public static class ByValue extends Data implements Structure.ByValue { }

    public static class ByReference extends Data implements Structure.ByReference { }

    public volatile int field;


}

在另一边(C++边)我们有“相同”的结构。


typedef struct data {

  int field;

JavaScala 通过“链接”基于类、JNA基于本机代码的调用以及本机代码本身,将所有这些内容绑定在一起C++。


trait HelloWorld extends Library {


  def GetData(m: WString) : Data.ByValue;


}


object HelloJNA {


  def main(args:Array[String]):Unit = {


    val libc   = Native.load( "HelloWorld", classOf[HelloWorld] )


    var result = libc.GetData( new WString("I am passing String!") )

    println("Result: " + result.field);


  }

}

笔记


重要的是要注意Java结构和C++结构之间的类型匹配。


查看完整回答
反对 回复 2023-06-21
  • 1 回答
  • 0 关注
  • 179 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信