2011-09-21 57 views
2

似乎痛飲指針鑄造is broken壓倒一切痛飲鑄造

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

這真的應該只是

jresult= (jlong)result; 

我如何可以掛接到呷告訴它怎麼投?

回答

1

您可以使用一個typemap。有關更多信息,請參閱文檔here。可能看起來像下面的代碼。

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

你是泛型還是這是字面類型映射? – paleozogt

+0

是通用的。 TYPE應該是你的類型。我所說的應該接近。 – Frohnzie

+0

我需要爲每個*指針類型創建一個typemap?這可能會變得詳盡無遺。當然,有一種方法可以爲所有指針指定一個規則? – paleozogt

1

雖然Frohnzie的答案是技術上是正確的(這就是我要求的,畢竟),最好的辦法是不要砍痛飲不如何鑄造,但通過-fno-strict-aliasing到GCC。

在SWIG文檔埋葬了專門says what to do

重要

如果你要使用的優化開啓與海灣合作委員會(例如 -02),確保您也編譯-fno嚴格混疊。從gcc-4.0開始,GCC 優化變得更具攻擊性,而 將導致代碼失敗,並打開嚴格別名優化 。有關更多詳細信息,請參閱C/C++ to Java typemaps部分。