几次windows代码迁移到linux纪实
windows代码迁移到linux方法注意事项
·
几次windows代码迁移到linux纪实
迁移方法
一般windows代码为MFC 开发的 ,第一次被要求迁移到QT 便尝试将代码迁移到QT 并迁移至linux (一次是麒麟一次是ubuntu)
1为了保留原来的结构,先将能用QT 写的用QT 写如QFile ,QString,QThread, TCP UDP 等操作要求不高的可以用QSocket 总之可以用QT 都全换了,把一些c语言的形式,封装成C++类的 形式。 其他的也尽量用 C++ 的stl 。工作量大。
2 后来不想全改QT ,
如果不同函数名功能类似 头文件
#ifdef __unix 写入linux 下的头文件,
将调用的函数名define为windows下的文件名 注意参数对对号入座。这样保留了原来代码。
#ifdef __unix
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#define _mkdir(path) mkdir(path,0)
#define _access(pathname,mode) access(pathname,mode)
#define fopen_s(pFile,filename,mode) ((*(pFile))=fopen((filename), (mode)))==NULL
#define CreateFile(pFile,filename,mode) ((*(pFile))=fopen((filename), (mode)))==NULL
#endif
有的实现函数不同 代码也差异比较多在代码实现处
用了#ifdef _WIN32 #else #endif
#ifdef _WIN32
hd = CreateFile(pStrPath, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE == hd)
{
return LOG_FAILED;
}
if (DWORD_NULL == SetFilePointer(hd, iPos, NULL, FILE_BEGIN))
{
return LOG_FAILED;
}
iRet = SetEndOfFile(hd);
CloseHandle(hd);
#else
mode_t perms = S_IRWXU; // Pick appropriate permissions for the new file.
int fd = open("file", O_CREAT|O_EXCL, perms);
if (fd >= 0) {
// File successfully created.
} else {
// Error occurred. Examine errno to find the reason.
}
#endif
注意事项
#pragma once 尽量删除 不是所有编译器保证适用。不能保证跨平台。不过貌似影响不大 因为很多编译器都支持了。
好多没有定义的类型自定义
#ifndef VOID
typedef void VOID;
#endif
#ifndef SOCKET
typedef int SOCKET;
#endif
#ifndef HANDLE
typedef void * HANDLE;
#endif
#ifndef TCHAR
typedef char TCHAR;
#endif
#ifndef sockaddr
typedef struct sockaddr sockaddr;
#endif
windows是unicode编码 linux uft-8
QT 编码不对时提示 Error could not decode xxx 可以将程序文本用txt打开’另存为‘更改其编码。
一些为定义的类型如LPCSTR,LPSTR自定义。
#ifndef LPCSTR
typedef const char* LPCSTR;
#endif
#ifndef LPSTR
typedef char* LPSTR;
#endif
#ifndef LPTSTR
typedef char* LPTSTR;//LPTSTR:32-bit指针 每字符可能占1字节或2字节,取决于Unicode是否定义
#endif
针对linux 还有windows 的api不能用的 ,具体问题具体分析。
如windows的注册表
linux 下没有。具体功能具体实现
windows的Service服务程序开发
linux 是systemctl命令
更多推荐
已为社区贡献1条内容
所有评论(0)