本文通过归纳总结目前C++程序设计语言下跨平台软件开发的相关技术,介绍了C++语言在计算机编程设计领域的优势和跨平台设计思想的提出与实现,运用几个实例说明跨平台软件开发在实践中的广泛应用。
C++语言的可移植性和跨平台开发的项目部署,在当下主流的编程软件中已经被广泛采用,最后结合笔者见解对跨平台软件开发提出新的展望。
1 C++语言的优势领域
C++语言在某些领域有着很高的地位,像科学数值计算中的数据挖掘,游戏开发里面的图形图像设计,以及在高级系统设计中的电子邮件系统,数据库系统等等都有C++语言的身影。同时,混合系统的设计和通用系统的设计问题都是C++所要解决的高层次的程序设计问题。更重要的是,Microsoft公司的很多产品都是用C++程序设计语言设计出来的,像Windows XP,Windows NT,Internet Explorer 和Visual Studio版本下的Visual C++,Visual Basic,.NET Framework等等。这些产品在不同程度上都奠基了C++程序设计语言在程序开发中的不可磨灭的地位。
2 跨平台开发
跨平台开发是程序设计领域在近些年提出的新的要求,它源自于现代软件工程的发展。跨平台的主要目的就是要让所开发的应用程序可以在不同类型的平台上顺利运行,跨平台项目的软件在开发的时候,必然要想到软件的移植性。
在实际的软件开发过程中,C++语言的跨平台开发项目,与具有可移植性的代码,他们的核心都是高度一致的。只需要一次编写,多次编译,这样就实现了既可以在不同的设备和产品上顺利运行,又不会产生功能损失的现象。因此,跨平台软件开发几乎可以运行在不同的平台上而不需要做出其他任何的调整和修改。
目前在市面上流行的几大系统软件的厂家,像Windows,Linux,Unix等在应用程序接口的实现中存在着较大的差异,同时,它们实现的细节和原理也存在着较大的差别。就连目前开源的操作系统代码Linux也与其他类似的软件差别甚远,那么,跨平台软件开发就迫在眉睫,只有能适应所有的操作系统应用程序的软件才有生存的价值。相对而言,要实现程序设计语言在不需要修改代码的情况下做到跨平台,就需要更加抽象的语言表达能力和较低的硬件控制力。那么,是如何实现能在多种系统中运行的软件呢?C++语言下跨平台软件开发就是一个很好的实例。
3 C++语言跨平台软件开发的实现
3.1 跨平台设计思想与整体思路
任何一个好的跨平台软件开发的实现,主要还是对整体设计的把握,跨平台程序设计要求实现与平台无关的代码,在设计和编写的过程中,还要对软件的架构和整体配置的合理性问题作出考虑。
图1
图1清晰的说明跨平台软件开发的设计思路,我们可以结合自身学习和实践经验在程序设计方面充分利用开源的代码和程序,就可以让跨平台的设计更加地趋于成功。
3.2 C++程序设计语言跨平台开发的策略
我们在编写程序代码的时候,总是要把编辑策略放在首位,针对于不同的OS,在其上创建和编辑文本文件,就要遵循不同的规则。比如行结束符,在Windows操作系统和DOS操作系统中普遍采用回车键,而在Unix中却使用的是换行符号。这种细微的差别就是跨平台软件开发必须考虑的问题。那么当我们要想把其中一个平台上编写的代码放在另一个操作系统上运行,极有可能出现不被正确解释的现象。另外,对于不同的操作平台其tab键的功能也有很大的区别,主要体现在间距上。
那么我们在编程的时候要注重这些差别,保证代码的书写和阅读对于不同的操作平台都是一致的,增加程序的可读性,进而也就实现了跨平台的思想。所以在每次开发之前都需要针对开发策略制定相应的规则:统一使用四个空格键来代替tab,也就是\t格式。Windows下的源文件代码需要存储在UNIX的文件格式,或者说是在Windows下的文件编写完成之后,通过DOS2UNIX命令实现文本格式的转换。
3.3 处理器差异的控制
鉴于C++语言自身语言的特点,建立了一个跨平台的抽象代码库,在不同的平台和编译器上进行合理的规划代码。C++语言里普遍使用了抽象,像BOOST和Stardard Template Library 。Boost标准类在不断的发展和改进过程中,完全能够帮助跨平台操作中的软件和程序来适应OS系统库的内部接口的不同,可惜这些不足以解决全部问题,主要是因为目前Boost没有包含所有的库函数的类库,又会出现不确定的情况,那么关于C++语言的部分也应该及时的维护和更新。
在平台上,利用库封装代码,又在不同的平台下调用已达到统一代码的目的。
# if define(_WIN 32) || define(WIN 64)
// ! 针对Windows 平台下的关键字_declspec (dlexport)的定义
# define AD_EXPORTCALL1_declspec (dllexport)
// ! 针对Windows 平台下的关键字_stdcall
# define AD_EXPORTCALL2_stdcall
# else
# define AD_EXPORTCALL1
# define AD_EXPORTCALL2
# endif
3.4 利用wxWidgets开发跨平台软件
wxWidgets 是一种跨平台开发的软件包,目前使得在跨平台的图像设计方面使用自身的程序。因为其兼容性相当的好,对于Windows,Linux,Unix等都兼容。而且,wxWidgets的底层是用C++程序设计语言实现的。下面用一个实例将说明wxWidgets的跨平台问题。
首先创造一个wxFrame的实例,并制定长宽和屏幕上的位置。然后,新建一个垂直的size widget和顶层窗口的子sizer。然后,再创建一个垂直sizer widget和一个水平子sizer。最后创建wxStatic实例以及为这个敞口应用中添加事件响应。以下将展示一部分核心代码。
class myframe : public wxframe
{
public:
Myframe (const wxstring & title);
}
Myframe::myframe(const wxstring & title):wxframe(null,wxid_any,title)
{
wxmenu *filemenu = new wxmenu;
Wxmenu *helpmenu = new wxmenu;
helpmenu->append(wxid__about,_t(“关于“tfl”),_t(“显示关于对话框”));
filemenu->append(wxid_exit,_t(“退出”talt-x”),_t(“退出应用程序”));
wxmenubar*menubar=new wxmenubarO;
menubar->append(filemenu,—K“文件”));
menubar->append(helpmenu,_t“帮助”));
Setmenuba(menubar);
}
在设置完这个窗口之后,还需要新建一个类实现一写功能。
class MyApp:public wxApp
{
public:
virtual bool OnInitO;
}
bool MyApp::OnInit 0
{
myFrame * flame=new myframe(_t(‘wxwidgets程序”));
frame->show(true);
return ture;
}
4 结论
伴随着跨平台开发方式的不断发展,以及C++语言的不断壮大,在设计和开发项目的时候,工程师要想一次性完成能在不同的设备上通用执行的代码是比较困难的,我们要不断的借鉴自身和别人开发的经验,从各种各样的设计思想和软件工程中汲取知识,进行相对应的调整和修改。在实际的开发过程中,利用多线程的实现为实例和实际软件项目的需求,配合C++程序设计语言提供的日志管理的具体说明来意义解决出现的问题。
C++程序设计语言在未来有着巨大的市场潜力,并伴随着计算机科技的不断发展,跨平台软件开发在C++程序设计语言的支持下,可以在不同的软件工程师和开发人员的操作中呈现出许多之前从未有过的功能,因此,我相信,C++语言下的跨平台软件开发前程似锦。
作者:罗云青 来源:电子技术与软件工程 2015年9期