2014-06-10 3 views
0

내가 오브젝티브 -c에 대한 바인딩 JNA을을 writting있어 호출 할 필요가 나는 문제가있다 :은 JNA (objc_msgSend)와 128 비트 값을 반환 기본 기능

가 [NSValue sizeValue가]은 NSSize 구조를 반환합니다.

일반적으로 objc_msgSend_stret을 사용하는 것이 좋지만 구조가 충분히 작 으면 레지스터로 반환되므로이 경우에는 objc_msgSend 만 사용해야합니다. NSSize는 32 비트 모드의 두 개의 부동 소수점이므로 기본적으로 길다. 문제 없어. Function.invokeLong()을 사용하고 내 구조체에 대한 포인터를 잡고 두 개의 float 저장 공간에 long을 씁니다. 그러나 64 비트 모드에서는 128 비트 인 2 개의 2 배가됩니다. 나는 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

답변

0

나는 해결 방법을 발견했다.

[NSValue getValue : void *]가 작동합니다. 내용을 포인터에 넣습니다.