忽然看到飞鸽传书的一篇推荐文章
2010-08-25 11:35
330 查看
当自己还在忙于代码间的平台移植时,忽然看到飞鸽传书的一篇推荐文章《纯忽悠程序员的开发要求(1):编写代码时要考虑跨平台》(99b233cd-9fd1-49a6-a531-7de40ec9de3e),一下子就愣住了,咋要求跨平台就成了忽悠了?
仔细看了一下文章,终于发现问题的根源,作者是认为在Windows,linux,unix这些系统间考虑跨平台性不必要。可问题是,跨平台难道就仅仅限制于这些大相径庭的系统之间么?代码跨平台的范围可就广了,即使是同样打着Windows旗号的各个系统,也必须考虑这跨平台的问题!
飞鸽传书?不可能出现这种情况?那我们先来看看实际情况。我公司是做车载的,方案很多,有采用intel嵌入式+Windows XP的,有ARM9 + Windows CE 5.0的,还有ARM11 + Windows CE 6.0。车载市场和个人PC机不太相同,举个最简单的一条,开机就必须显示一个UI。虽然硬件平台不同,操作系统迥异,但对于客户而言,展现于他们眼前的UI基本上是类似的。
那么问题就来了,是不是该为每一个操作系统定义一套飞鸽传书呢?估计大家都会对这个建议摇头。因为无论是Windows XP,还是Windows CE 5.0,或是Windows CE 6.0,他们的基本程序流程都是一样的,根本就没必要分开定义。那是不是意味着同一套代码可以放之四海而皆准?答案其实是否定的。
举个简单的例子,GetProcAddress函数是Windows XP和Windows CE都具有的,调用方式也一样。但别以为一切都顺利,在Windows XP中,GetProcAddress的lpProcName形参是ANSIC,而Windows CE却是UNICODE!不要小看这差异,这可能会导致代码字符串储存的方式!
当然还不仅仅如此,比如飞鸽传书中有SetEventData函数,但如果是在Windows XP里,还是用C++的话,那么这函数是没有的。如果想要同一套代码共存于两个系统,那么你就要决定,在飞鸽传书下程序进程间的数据交换,是采用自己动手写SetEventData的方式,还是选择另外的方式?这问题难道不值得思考么?
而同一系统的每个函数调用的返回值之间的不同(注意,这里说的不是同一个函数,在不同系统中的数值不同。因为这个内存地址,即使在同一系统中,按运行的时间前后,也可能不同的。这里指的函数间应该相同的返回值,比如hInstance应该和GetModuleHandle(NULL)调用相等的这种情形),又间接影响到需要用到句柄实例的函数,比如说飞鸽传书,LoadIcon等等。
当然,这些差异可能在具体的工程中只出现一两处,但飞鸽传书是决定为这两三行代码而重写整个系统架构,还是对这两三行代码做跨平台的特化?可能选择前者的不多,更多的是选择后者。而后者,不就是代码的跨平台么?这样的情形,难道考虑代码的跨平台也是忽悠?(http://www.cnblogs.com/i_like_cpp)
仔细看了一下文章,终于发现问题的根源,作者是认为在Windows,linux,unix这些系统间考虑跨平台性不必要。可问题是,跨平台难道就仅仅限制于这些大相径庭的系统之间么?代码跨平台的范围可就广了,即使是同样打着Windows旗号的各个系统,也必须考虑这跨平台的问题!
飞鸽传书?不可能出现这种情况?那我们先来看看实际情况。我公司是做车载的,方案很多,有采用intel嵌入式+Windows XP的,有ARM9 + Windows CE 5.0的,还有ARM11 + Windows CE 6.0。车载市场和个人PC机不太相同,举个最简单的一条,开机就必须显示一个UI。虽然硬件平台不同,操作系统迥异,但对于客户而言,展现于他们眼前的UI基本上是类似的。
那么问题就来了,是不是该为每一个操作系统定义一套飞鸽传书呢?估计大家都会对这个建议摇头。因为无论是Windows XP,还是Windows CE 5.0,或是Windows CE 6.0,他们的基本程序流程都是一样的,根本就没必要分开定义。那是不是意味着同一套代码可以放之四海而皆准?答案其实是否定的。
举个简单的例子,GetProcAddress函数是Windows XP和Windows CE都具有的,调用方式也一样。但别以为一切都顺利,在Windows XP中,GetProcAddress的lpProcName形参是ANSIC,而Windows CE却是UNICODE!不要小看这差异,这可能会导致代码字符串储存的方式!
当然还不仅仅如此,比如飞鸽传书中有SetEventData函数,但如果是在Windows XP里,还是用C++的话,那么这函数是没有的。如果想要同一套代码共存于两个系统,那么你就要决定,在飞鸽传书下程序进程间的数据交换,是采用自己动手写SetEventData的方式,还是选择另外的方式?这问题难道不值得思考么?
而同一系统的每个函数调用的返回值之间的不同(注意,这里说的不是同一个函数,在不同系统中的数值不同。因为这个内存地址,即使在同一系统中,按运行的时间前后,也可能不同的。这里指的函数间应该相同的返回值,比如hInstance应该和GetModuleHandle(NULL)调用相等的这种情形),又间接影响到需要用到句柄实例的函数,比如说飞鸽传书,LoadIcon等等。
当然,这些差异可能在具体的工程中只出现一两处,但飞鸽传书是决定为这两三行代码而重写整个系统架构,还是对这两三行代码做跨平台的特化?可能选择前者的不多,更多的是选择后者。而后者,不就是代码的跨平台么?这样的情形,难道考虑代码的跨平台也是忽悠?(http://www.cnblogs.com/i_like_cpp)
相关文章推荐
- MySQL索引背后的数据结构及算法原理(写的很要好的一篇文章,在“结构之法算法之道”中看到的推荐文章)
- 在Google网上论坛中看到一篇文章,粘贴下来收藏。《Java 推荐读物与源代码阅读》
- (转载)很好的一篇文章微博上看到的 高级语言的编译:链接及装载过程介绍
- 今天看到的一篇文章,标题是“开发人员间的效率差在哪里?”,读后有感
- 推荐一篇介绍.NET MetaData的文章
- 无意中看到一篇不一样的励志文章
- Android启动过程以及各个镜像的关系——推荐android初学者必看的一篇文章!
- 看到一篇很好的文章《BEM —— 源自Yandex的CSS 命名方法论》分享下
- 一篇在我开始jsp之路时看到的文章(2)
- 推荐一篇文章 感觉挺好 迷惘的时候可以看一看
- 看到一篇文章《==与equals()的区别》(java)
- 正在移植Goahead webserver,看到一篇在VxWorks上移植的文章
- 看到一篇专门讲JAVA多线程的文章,挺不错
- 最近看到一篇文章拿来跟午饭们分享--养生之道补肾气
- 看到一篇关于网络的文章,颇有同感,拿来分享
- CImage 是基于GDI+的,很老的一篇文章,我很久很久以前看到过的
- [article]看到一篇文章:找工作?考研?出国?赚钱?未来
- 推荐给架构师一篇好文章
- 今天看到一篇介绍环形消息队列的文章,学习了
- 推荐一篇TestFrame自动化测试的经典文章:Test Automation Frameworks