2011-09-06 17 views
15

Estoy intentando portar un programa de Windows a Linux. Nunca he programado en Linux y tengo muy poca idea de lo que estoy haciendo. Logré eliminar muchos de los errores que obtuve en el compilador de G ++ en Linux y he rastreado la mayoría de los restantes a tipos de variables no existentes.¿Qué debo usar en lugar de windows.h en Linux?

Saqué el archivo windows.h pero sí sé sabe qué hacer con las variables CALLBACK, HANDLE, DWORD y HHOOK. Aparentemente no hay un equivalente a HANDLE en Linux, así que creo que tendré que reescribir parte de la estructura.

¿Alguien puede explicarme qué debería hacer o señalarme algunos tutoriales que me enseñan a hacer estas cosas en Linux?

Mi programa ejecuta un bucle de sondeo en una red RS-485 si eso ayuda.

+5

No ha dicho lo que hace su código, entonces no. puede sorprenderlo, pero describir ** todas ** las diferencias en la programación de Windows vs Linux requiere más espacio del que normalmente contiene una respuesta SO. No hay una función mágica 'ConvertWindowsToLinux()'. Son OS diferentes con diferentes API. Para hacer algo con las API de Linux (POSIX, realmente), deberá comenzar por definir * qué quiere hacer *. – jalf

+0

Si desea programación de GUI en Linux, se llama programación "X" y no está relacionada con Win32. –

Respuesta

19

Los typedefs faltantes (HANDLE etc.) no eres tu problema Su problema es que Linux y Windows tienen API completamente diferentes, no se puede simplemente esperar transferir uno al otro reemplazando unas pocas definiciones de tipo.

La porción completa de su código que depende de la plataforma tiene que ser reemplazada. Su primer paso es, por lo tanto, aprender la API de Linux. La mejor forma de hacerlo es obtener un libro sobre la programación de Linux.

Además, Linux no proporciona una API para la gestión de ventanas por defecto como ocurre con las ventanas por lo que si usted está programando una aplicación gráfica a continuación, tiene que elegir una biblioteca de ventanas también.

1

windows.h significa que su aplicación utiliza la API del sistema operativo Windows, no hay una asignación de 1 a 1 a otras bibliotecas en Linux.

Puede considerar ejecutar su aplicación en Wine si no desea portar la aplicación.

0

Linux tiene un modelo de programación bastante diferente a Windows. Si tiene interés en programar un puerto serie (RS485 es similar a RS232) here es un tutorial que debe mostrarle los conceptos básicos.

1

Tiene 2 opciones.

  1. Typedef los tipos que faltan en los tipos que son adecuados para su nuevo sistema operativo.
  2. Vuelva a escribir el código para no usar esos tipos.

Dudo que alguien pueda decirle lo que debe hacer con el puerto sin conocer los detalles de cada caso. Lo que pasa con windows.h es que depende del sistema operativo de Windows ... tendrás que cambiar las funciones a las que estás llamando. En ese caso, ya no utilizará los tipos que no tiene.
Básicamente, tendrá que comprender para qué se usa la API de Windows y encontrar las funciones equivalentes para su sistema operativo objetivo.

11

No hay "equivalente", por así decirlo, para windows.h en Linux, necesita corregir sus errores caso por caso, o mejor, reescribir su código para Linux (si no es demasiado complicado).

Sin embargo, si hacemos caso de las ventanas API específicas, puede ser capaz de solucionar los errores typedef (DWORD, mango, ...):

#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

Cuestiones relacionadas