我正在为 ObjectiveC 编写 JNA 绑定,但我遇到了一个问题:
[NSValue sizeValue] 返回一个 NSSize 结构。
通常你会考虑使用 objc_msgSend_stret,但是当结构足够小时,它会在寄存器中返回,所以在这种情况下你必须只使用 objc_msgSend。NSSize 是 32 位模式下的两个浮点数,所以基本上很长。没问题。我使用 Function.invokeLong() 然后抓取指向我的结构的指针并将 long 写入两个浮点存储空间。但在 64 位模式下,它是 128 位的两个双打。我使用了 GCC --save-temps,果然返回的结构在 xmm0 和 xmm1 中。所以必须使用 objc_msgSend。
JNA 没有 Function.invokeLongDouble() 或 Function.invokeLongLong() (128 位返回值)
我该怎么办???
有关 objc_msgSend 和结构的更多详细信息,请参阅此链接: http ://www.sealiesoftware.com/blog/archive/2008/10/30/objc_explain_objc_msgSend_stret.html