2011-09-21 5 views
2

이 보인다 꿀꺽 꿀꺽 포인터 캐스팅 is broken :최우선 SWIG는

*(int **)&jresult = result; // shenanigans 
return jresult; 

그것은 정말

jresult= (jlong)result; 

가 어떻게 어떻게 캐스팅하는 방법을 알려 꿀꺽 꿀꺽에 연결할 수 있어야한다?

답변

1

typemap을 사용할 수 있습니다. 자세한 내용은 doc here을 참조하십시오. 아마도 아래 코드와 비슷한 모양 일 것입니다. Frohnzie의 대답은 (그것이 내가 결국, 요구 기능) 기술적으로 정확하지만

%typemap(out) TYPE * 
%{ 
    *($&1_ltype)&$result = (jlong)$1; 
%} 
+0

당신은 일반적입니까? 아니면 문자 그대로의 typemap입니까? – paleozogt

+0

일반. 유형이 귀하의 유형이어야합니다. 내가 쓴 것은 가깝다. – Frohnzie

+0

모든 * 포인터 유형에 대해 typemap을 작성해야합니까? 그게 전부가 될 수 있습니다. 확실히 모든 포인터에 대한 규칙을 지정하는 방법이 있습니까? – paleozogt

1

는 가장 좋은 방법은 꿀꺽 꿀꺽 캐스팅 않는 방법 해킹,하지만 GCC에 -fno-strict-aliasing을 통과하지 않는 것입니다. 꿀꺽 꿀꺽 문서에 묻혀

는 특히 says what to do :

중요

당신이 최적화를 사용하려는 경우는 GCC와 설정 (예를 -O2에 대한)로 컴파일 또한 당신을 위해 -fno-strict-aliasing. GCC 최적화가 gcc-4.0 이후로 더욱 공격적으로되었으며 은 엄격한 앨리어스 최적화가 실패한 코드가 으로 켜지 게됩니다. 자세한 내용은 C/C++ to Java typemaps 섹션을 참조하십시오.

관련 문제