读书人

WINDOWS函数怎么在linux上替换其他函

发布时间: 2013-02-04 10:50:21 作者: rapoo

WINDOWS函数,如何在linux下替换其他函数使用?!
请教各位师兄如何编写跨平台代码

#ifdef linux
return !strcasecmp(cKEY,cMacth);
#else
return !strcmp(cKEY,cMacth);
#endif


有没有更好的方法解决跨平台时函数不一致的问题?保持代码简洁?!
[解决办法]
没有。 或者直接用已经封装好的跨平台的库。
[解决办法]
基本上大多数还是楼主这种写法。
[解决办法]
我们知道任何操作系统之上的应用程序的功能实现都依赖于操作系统API。基于这个认识,我们大概可以得到这样一个认识:任何的跨平台代码不过是对不同平台的操作系统的API的一层封装。现在以跨平台库gtk+的动态加载dll的函数g_module_open为例,我们可以设想一下它是如何实现以做到跨平台的。我们知道Windows平台下动态加载dll的函数是LoadLibrary, 而Linux平台动态加载共享库(在linux平台下习惯将动态链接库称为共享库)为dlopen。那么我们可以设想g_module_open大概可以这样实现:

GModule * g_module_open(char* pszFileName,int Flag )
{
#if defined _WINDOWS
return LoadLibrary(pszFileName);

#else
#if defined _LINUX // 这里假设_LINUX为LINUX平台的标识宏
return dlopen(pszFileName, Flag);
#endif
#endif
}

这里我们设想编写跨平台代码的关键在于在不同平台中找到实现相同功能的接口,然后在上面封装一层外壳供使用者调用。为什么我们说使用标准C能够实现跨平台?究其原因在于标准C是一个业界标准,在符合该标准不同的操作系统都已实现,相当于我之前提到的那层外壳。当然编写跨平台代码是有很多地方需要注意的,比如字节顺序(大端法机器还是小端法机器),字节对齐和填充等等,远不像我所说的那么简单。

[解决办法]
没有更好的方法,基本上都需要包装一层,要想简洁的话,你可以从一开始就选择跨平台的Lib,这样相当于是别人已经帮忙把与系统相关的部分抽象出来了。

引用:
请教各位师兄如何编写跨平台代码

C/C++ code?12345#ifdef linux return !strcasecmp(cKEY,cMacth);#else return !strcmp(cKEY,cMacth);#endif

有没有更好的方法解决跨平台时函数不一致的问题?保持代码简洁?!

……

读书人网 >C++

热点推荐