猿问

结构 JNA 返回错误值

从 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。


慕妹3146593
浏览 181回答 1
1回答

慕标琳琳

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++结构之间的类型匹配。
随时随地看视频慕课网APP

相关分类

Java
我要回答