- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
跨平台软件的开发方式2007年04月15日 星期日 09:48
原创:smalltalk
随着经济和技术的发展,全球化进程的加速,特别是互联网的发展和普及,为软件提供了一个世界范围的运行环境,当一个软件发布到Internet上面时,这个软件很可能瞬间在全世界就被人使用。从软件开发商的角度来看,同时具有跨平台和全球化特性的软件能够最大限度的占有市场;从自由软件开发团体和个人来看,开发的软件不但能够运行在多种操作系统下,而且还能够以不同的语言版本运行,全世界用户都可以使用,这本身就符合自由和开放的追求。由于这些因素,跨平台技术和全球化技术一直是软件业研究和发展的重要课题。
开发跨平台软件和全球化软件的最大目的是为了争取更多的用户,获得更大的市场。跨平台软件能够在多个不同类型的操作系统下运行,它从操作系统层次拓宽软件的用户群体;全球化软件是既具有国际化特性又进行了本地化处理的软件,这样,世界上不同国家和地区的用户都能以自己熟悉的语言和习惯来使用该软件。具有跨平台特性的全球化软件是非常有“魅力的”,它能够吸引到更多的潜在用户。
由于跨平台和国际化两者都是特别广泛的概念,不同的软件架构、不同的开发语言,采用的方法各不相同,为了做到不以偏概全,本篇文章将主要针对那些采用C/C++语言进行开发的、并准备添加或者已经具有跨平台特性的、同时还需要全球化的软件。文章为开发者在设计和实现这类软件时提供一些指导性意见,给出一些针对跨平台软件实施全球化的方法,并提出了一种采用跨平台资源文件和模块配合的解决方案和具体实现。
*什么是跨平台软件
跨平台软件技术在过去的十几年来逐步发展,特别是当个人计算机(PC MAC)性能的提高,LINUX操作系统的出现,JAVA语言的推出,呈现出跳跃发展的趋势。目前不但很多著名的自由软件项目提供跨平台的自由软件,而且很多专业的软件厂商也将他们的产品向不同的平台移植。在发展的历程中,跨平台软件技术也逐步形成规范,但由于平台固有的异质性,在进行跨平台软件开发时,往往在软件的功能、效能与移植性等之间,要做适当的权衡,比较难整理出一般性的、与平台及工具种类无关的法则。
什么是跨平台软件,简单讲就是至少可以运行在两个不同操作系统平台下的软件,完成相同或者相似的功能,而且这个软件的可执行程序来自与一份源代码。
*跨平台软件的开发方式
跨平台软件的开发方式大体有三种,第一种是先在一个基准平台上开发好,然后再移植到其他的操作系统;第二种是采用的跨平台模块组合;第三种是采用虚拟机技术,利用平台无关的语言进行开发。
1. 移植
第一种开发方式是比较传统的做法,也是一直被广泛采用的方式。这种做法也称为软件移植(Porting),即把在一种操作系统下运行的软件通过改写部分代码,移植到另外一种或多种操作系统下运行。软件最初的设计、编码以及移植时使用的工具,这些决定了移植的代价。
如果软件在最初的设计、编码时没有考虑到以后的移植,大量采用了平台相关的技术和平台相关框架库进行编码,对这些代码移植将付出极高的代价。一种极端的情况是最初使用的开发语言不能跨平台的,以后要对这个软件进行移植,将不得不更换开发语言重新编写全部代码,还要进行全新的测试,这样的软件在移植时是异常困难的。
1.1. 宏定义
软件的代码,从跨平台的角度来看,可以分为平台相关的和平台无关的。采用C/C++编写的软件,在进行移植时,平台无关的的代码基本上不需要做大的改动,但平台相关的代码需要做很大的调整。这里所说的平台包括操作系统和编译器,为了能够做到让编译器在编译时根据当前的平台状况来自动选择需要编译的代码,我们一般需要用C/C++的编译宏指令来实现。举个例子,下面的一段代码是得到系统当前的时间并且格式化成字符串的操作,注意其中宏指令#ifdef …#else…#endif的使用。这段代码可以在Win32、Linux和大多数Unix平台通过编译:
#include stdio.h;
#include time.h;
#ifdef WIN32
#define LOCALTIME_R(t) localtime((t))
#define SNPRINTF _snprintf
#else
#define LOCALTIME_R(t) localtime_r((t), (struct tm *)tmres)
#define SNPRINTF snprintf
#endif
char * getcurrentdate(char *buffer, unsigned int buflen)
{
if (buffer)
{
struct tm *tmnow;
time_t long_time;
time(long_time );
您可能关注的文档
最近下载
- STEMI诊断和治疗指南解读—STEMI患者的急诊救治.pdf
- 重庆专升本数学2014-2025年真题试卷及答案汇总.docx VIP
- 2025年医疗卫生系统招聘考试(护理学)考前冲刺试题及答案.docx VIP
- (完整版)初中数学新课程标准(2011版)测试题(有答案)2021.docx
- 化学高考命题方向与复习策略(夏建华).ppt VIP
- 冲刺2025年高考大题突破得高分系列 化学01 化工流程综合题(逐空突破)(解析版).docx VIP
- 半导体级四氯化铪的制备方法.pdf VIP
- 冲刺2025年高考大题突破得高分系列 化学03 化学反应原理综合题(逐空突破)(解析版).docx VIP
- 2024-2025学年上海师范大学附属中学高三入学调研英语试题(1)试卷含解析.doc VIP
- 冲刺2025年高考大题突破得高分系列 化学02 化学实验综合题(逐空突破)(解析版).docx VIP
文档评论(0)