使用JNA,我加載C語言編寫的一個dll ++和℃以內調用本函數++函數:JNA:字符數組作爲函數參數
int xxfunction(Char* ptr){...}
在這裏,我需要發送一個字符數組,這樣的功能將分配對它的價值。基本上我需要通過引用傳遞char數組。
按照JNA文檔,C++ char*
等效在Java是String
,所以我創建字符串對象,並它傳遞給函數等如下所示:
Java函數聲明:
interface foo extends Library
{
....//loading dll and other work
int xxfunction(String chararray);//function declaration
}
Java函數調用:
public static void main(String args[])
{
String str="abcd";
int i=fooinstance.xxfunction(str);//function call
}
但是當我執行該代碼它給我:
一個致命的錯誤已被Java運行時環境檢測: 無法寫入核心轉儲。在默認情況下,默認情況下未啓用小型轉儲器 Windows的客戶端版本
崩潰發生在Java虛擬機的本機代碼之外。查看有問題的框架報告錯誤的位置。
那麼它是正確的方式來傳遞字符串作爲參數,其中函數期望字符指針? 在java中的C++ char等價物是字節,所以我需要傳遞字節數組作爲參數嗎?
我甚至不能通過指針對象從JNA運行,因爲它給了我IllegalargumentException
。
感謝您的回覆,是的C++函數參數不是'const char *'它只是'char *',所以根據您的建議我試圖傳遞'byte []',甚至'Memory'也是它給我的**'byte [] primitivebytearray = new byte [256];''int i = fooinstance.xxfunction(primitivebytearray);''String str = new String();' 'Memory mem = new Memory(257);' 'mem.setString(0,str);''i = fooinstance.xxfunction(mem);' –
您的本地代碼正在向傳入緩衝區寫入超過256-257個字符,或者其他問題。無論是儀器/記錄您的本機代碼執行,或附加一個調試器,以捕捉源頭的崩潰。 – technomage
沒有它不超過256個字符,我試圖將所有其他可能的數據類型也傳遞給該函數,但它給出了相同的錯誤。所以我應該發送什麼參數在java中使它與C++中的char *兼容?在JNA中沒有辦法做到這一點?我無法附加記錄的文件,因爲我的公司不允許訪問任何共享網站 –