2011-07-21 121 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可能是一次清理代码打破了问题:) –