2011-09-06 46 views
15

我试图将一个Windows程序移植到Linux上。我从来没有在Linux中编程过,也很少知道我在做什么。我已经设法消除了我在Linux上的G ++编译器中遇到的很多错误,并且将大多数其余的错误追踪到了不存在的变量类型。我应该用什么来代替linux.h中的windows.h?

我拿出windows.h文件,但我知道知道做什么用的CALLBACKHANDLEDWORDHHOOK变量做。显然在Linux中没有相当于HANDLE,所以我想我可能不得不重写一些结构。

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

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

+5

你还没有说你的代码做什么,所以没有。它可能会让你感到惊讶,但是描述**所有**在Windows和Linux编程中的差异需要比SO答案通常包含的更多空间。没有一个不可思议的'ConvertWindowsToLinux()'函数。他们是不同的操作系统与不同的API。为了做一些使用Linux API(POSIX,真的),你需要首先定义*你想要做什么*。 – jalf

+0

如果你想在Linux下进行GUI编程,它被称为“X”编程,而它与Win32无关。 –

回答

19

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

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

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

1

windows.h意味着您的应用程序使用Windows操作系统的API,因此不会在Linux上与其他库进行1对1映射。

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

0

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

1

您有2个选项。

  1. 将您的缺失类型键入适合您新操作系统的类型。
  2. 重写代码不使用这些类型。

我怀疑任何人都可以告诉你,如果不知道每个案例的具体情况,你应该怎么做。关于windows.h的事情是它依赖于windows操作系统......你将不得不改变你从它调用的函数。在这种情况下,你将不再使用你没有的类型。
基本上,你必须了解Windows API的用途,并找到目标OS的等效函数。

11

在Linux中没有什么“等价的”,对于windows.h来说,你需要修复你的错误,或者更好地重写你的linux代码(如果它不是太复杂)。

然而,如果我们忽略了窗户特定的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

相关问题