我有一個C函數(編譯成一個DLL),需要一個WinDef.RECT
對象,並打印出的四個座標:清分WinDef.RECT結構在JNA
DllExport void Test(RECT rect)
{
printf("Rect: %i, %i, %i, %i", rect.top, rect.left, rect.bottom, rect.right);
}
在Java(JNA)側我試圖傳遞一個WinDef.RECT
如下:
WinDef.RECT rect = new WinDef.RECT();
rect.bottom=0;
rect.left=0;
rect.right=0;
rect.top=0;
jna.INSTANCE.Test(rect);
不過,我只是得到廢話數字出來(這並不一致,具體費用每次),例如:
Rect: -857788769, 11343200, 8044544, 8044544
我假設我沒有在JNA端正確定義RECT(C++函數可以從同一個dll中的其他本地函數中調用),但除此之外,我有點卡住了!
我注意到,當我使用一個32位JRE與32位版本的DLL時,我遇到了同樣的問題,而一切正常工作與64位版本。 – regulus
@regulus感謝您的觀察 - 你會建議這是一個JNA錯誤在這種情況下? (不幸的是,我的用例將我限制爲32位堆棧。) – berry120
請注意,w32 API在32位系統上使用['stdcall'](http://stackoverflow.com/questions/297654/what-is-stdcall)位,但不是64位。確保你的本地庫使用'stdcall',確保你的JNA映射實現了'StdCallLibrary'。 – technomage