Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 结构JNA返回错误的值 从C++代码中我得到了结构,但是我得到的所有值都是默认值。下面是我的C++代码< /P> extern "C" { PDFCONTENTDATA GetPDFContentData(LPTSTR lptszS3FileURL) { PDFCONTENTDATA pdfContentData; pdfContentData.m_uiRasterDPI = 100; return pdfContentData; } };_Java_C++_Scala_Java Native Interface_Jna - Fatal编程技术网

Java 结构JNA返回错误的值 从C++代码中我得到了结构,但是我得到的所有值都是默认值。下面是我的C++代码< /P> extern "C" { PDFCONTENTDATA GetPDFContentData(LPTSTR lptszS3FileURL) { PDFCONTENTDATA pdfContentData; pdfContentData.m_uiRasterDPI = 100; return pdfContentData; } };

Java 结构JNA返回错误的值 从C++代码中我得到了结构,但是我得到的所有值都是默认值。下面是我的C++代码< /P> extern "C" { PDFCONTENTDATA GetPDFContentData(LPTSTR lptszS3FileURL) { PDFCONTENTDATA pdfContentData; pdfContentData.m_uiRasterDPI = 100; return pdfContentData; } };,java,c++,scala,java-native-interface,jna,Java,C++,Scala,Java Native Interface,Jna,下面是我的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 tag

下面是我的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的位置。

给你:

为了顺利调用
JNA
,有一个Java类
recipeNo057.Data
。这门课非常简单

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++
side),我们有“相同”的结构

typedef struct data {
  int field;
} 
Scala通过“链接”
Java
基于类、
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++
结构之间的类型匹配很重要。

请告诉我为什么标记为negative.Hm。为什么被否决?@Oo.Oo你能帮我匹配一下吗?谢谢你的回答。但在我的情况下,我仍然得到了错误的值。但是当我这样做时,你的结构运行良好。我可以看到,唯一的情况可能与不同的类型有关。比如C++代码里面有一些不同于“int”的代码。在我的例子中,如果您将
int-field
更改为
double-field
,您也将得到
0
。所以,确保你的类型匹配。啊!我遇到了一个问题,就是外部c出现了一些问题。这就是为什么它显示默认值。看起来它完全是关于结构填充的:(但是,我仍然不知道如何处理
布尔值
;)