亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

結構 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 關注
  • 226 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號