我有一个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