我正在尝试将Windows程序移植到Linux。我从来没有在Linux上编程,也不知道我在做什么。我已经设法消除了我在Linux上的G ++编译器中遇到的许多错误,并将大多数剩余的错误追溯到不存在的变量类型。
我取出了windows.h
文件,但我知道如何处理CALLBACK
,HANDLE
,DWORD
和HHOOK
变量。显然在Linux中没有等同于HANDLE
所以我认为我可能需要重写一些结构。
任何人都可以解释我应该做什么,或者指点一些教我如何在Linux中做这些事情?
如果有帮助,我的程序会在RS-485网络上运行轮询循环。
答案 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
答案 2 :(得分:2)
windows.h意味着您的应用程序使用Windows操作系统的API,而Linux上的其他库没有一对一的映射。
如果您不想移植应用程序,可以考虑在Wine下运行应用程序。
答案 3 :(得分:1)
您有2个选项。
我怀疑在没有了解每个案例的具体情况的情况下,任何人都能告诉您应该如何处理端口。关于windows.h的事情是它依赖于Windows操作系统......你必须改变你从它调用的函数。在这种情况下,您将不再使用您没有的类型 基本上,您必须了解Windows API的用途,并找到目标操作系统的等效功能。
答案 4 :(得分:0)
Linux与Windows的编程模型完全不同。如果您对编程串口感兴趣(RS485类似于RS232)here是一个教程,应该向您展示基础知识。