2011-07-21 165 views
3

我已經開發的BlackBerry OS 5.0聊天應用程序,但我的客戶要我做它移植到所有的平臺,從4.5到5.0及以上。 我曾嘗試使用預處理器指令在運行時編譯OS兼容的類,但我還沒有成功。我懷疑我使用預處理器的方式。所以我在這裏舉一個例子:黑莓多操作系統版本的兼容性問題

//#ifdef JDE_4_6_0_AND_ABOVE 
/* 
//#endif 

//some code 

//#ifdef JDE_4_6_0_AND_ABOVE 
*/ 
//#endif 


//#ifndef JDE_4_6_0_AND_ABOVE 
/* 
//#endif 

//Alternative of code used above 

//#ifndef JDE_4_6_0_AND_ABOVE 
*/ 
//#endif 

這就是我爲代碼的特定部分所做的。這裏的邏輯是先用代碼,如果OS版本是4.6及以上...並使用第二個代碼,如果操作系統版本低於4.6 ....

但在預處理器的代碼似乎並沒有編譯任何一種情況。

注意:我在代碼的開頭放了「//#preprocess」,並在我的應用程序描述符xml文件中定義了預處理程序,但仍然沒有運氣。還有沒有其他解決方案來處理BBOS版本之間的兼容性?

回答

6

您正在將代碼放置在語句之外。 ifdef和ifndef打開語句,endif關閉語句。你也可以使用#else,因爲你只有兩種情況。

//#ifdef JDE_4_6_0_AND_ABOVE 

System.out.println("JDE_4_6_0_AND_ABOVE"); 

//#else 

System.out.println("NOT JDE_4_6_0_AND_ABOVE"); 

//#endif 

乾杯

+1

的代碼是沒有格式化之前以及因此它可能已經很難看到,但user856065使用預處理程序添加/刪除註釋塊。 –

+0

@Michael:我看過一些教程網站建議這樣做,而且我也沒有用這種方法運氣。我使用Ray將代碼放入#if塊的方法,對我來說工作正常。 –

+0

Doh!我只是點了點頭。如果原始代碼是原始代碼,而不是隻是cut'n'paste的結果,那麼它不會工作,因爲註釋開啓/關閉程序不能與/#ifdef // #endif(@Michael this可能是一次清理代碼打破了問題:) –