在linux中我应该使用什么而不是windows.h.

时间:2011-09-06 09:13:17

标签: c++ linux porting

我正在尝试将Windows程序移植到Linux。我从来没有在Linux上编程,也不知道我在做什么。我已经设法消除了我在Linux上的G ++编译器中遇到的许多错误,并将大多数剩余的错误追溯到不存在的变量类型。

我取出了windows.h文件,但我知道如何处理CALLBACKHANDLEDWORDHHOOK变量。显然在Linux中没有等同于HANDLE所以我认为我可能需要重写一些结构。

任何人都可以解释我应该做什么,或者指点一些教我如何在Linux中做这些事情?

如果有帮助,我的程序会在RS-485网络上运行轮询循环。

5 个答案:

答案 0 :(得分:19)

缺少的typedef(HANDLE等)不是你的问题。你的问题是Linux和Windows有完全不同的API,你不能简单地希望通过替换一些类型定义将一个端口移植到另一个。

必须替换代码的完整平台相关部分。因此,您的第一步是学习Linux API。这样做的最好方法是获得一本关于Linux编程的书。

此外,Linux不像Windows那样为窗口管理提供默认API,因此如果您正在编写图形应用程序,那么您还需要选择一个窗口库。

答案 1 :(得分:13)

没有“等效”,可以说,对于Linux中的windows.h,你需要逐个修复你的错误,或者更好,重写你的linux代码(如果它不是太复杂)。

但是,如果我们忽略特定于Windows的API,您可以修复typedef错误(DWORD,HANDLE,...):

#ifndef DWORD
#define WINAPI
typedef unsigned long DWORD;
typedef short WCHAR;
typedef void * HANDLE;
#define MAX_PATH    PATH_MAX
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned int BOOL;
#endif

typedef source code

答案 2 :(得分:2)

windows.h意味着您的应用程序使用Windows操作系统的API,而Linux上的其他库没有一对一的映射。

如果您不想移植应用程序,可以考虑在Wine下运行应用程序。

答案 3 :(得分:1)

您有2个选项。

  1. 将缺少的类型定义为适合您的新操作系统的类型。
  2. 重写代码,不要使用这些类型。
  3. 我怀疑在没有了解每个案例的具体情况的情况下,任何人都能告诉您应该如何处理端口。关于windows.h的事情是它依赖于Windows操作系统......你必须改变你从它调用的函数。在这种情况下,您将不再使用您没有的类型 基本上,您必须了解Windows API的用途,并找到目标操作系统的等效功能。

答案 4 :(得分:0)

Linux与Windows的编程模型完全不同。如果您对编程串口感兴趣(RS485类似于RS232)here是一个教程,应该向您展示基础知识。