2011-09-06 17 views
15

Sto provando a portare un programma Windows su Linux. Non ho mai programmato in Linux e ho pochissima idea di quello che sto facendo. Sono riuscito ad eliminare molti degli errori che ho ottenuto nel compilatore G ++ su Linux e ho tracciato la maggior parte dei restanti a tipi di variabili inesistenti.Cosa dovrei usare al posto di windows.h in linux

ho tirato fuori il file windows.h ma so so cosa fare con le variabili CALLBACK, HANDLE, DWORD e HHOOK. Apparentemente non c'è equivalente a HANDLE in Linux, quindi penso che potrei dover riscrivere parte della struttura.

Qualcuno può spiegare cosa dovrei fare o indirizzarmi ad alcuni tutorial che mi insegnano come fare queste cose in Linux?

Il mio programma esegue un ciclo di polling su una rete RS-485 se questo aiuta.

+5

Non hai detto cosa fa il tuo codice, quindi no. potrebbe sorprendervi, ma descrivere ** tutte ** le differenze nella programmazione di Windows vs Linux richiede più spazio di una risposta SO tipicamente contenuta. Non esiste una funzione magica di 'ConvertWindowsToLinux()'. Sono diversi OS con diverse API. Per fare qualcosa usando le API di Linux (POSIX, davvero), devi iniziare definendo * cosa vuoi fare *. – jalf

+0

Se si desidera programmare la GUI in Linux, si chiama programmazione "X" e non è collegato a Win32. –

risposta

19

I typedef mancanti (HANDLE etc.) non sono il tuo problema Il tuo problema è che Linux e Windows hanno API completamente diverse, non puoi semplicemente sperare di effettuare il porting l'uno sostituendo alcune definizioni di tipi.

La porzione completa del codice relativa alla piattaforma deve essere sostituita. Il primo passo è quindi imparare l'API di Linux. Il modo migliore per farlo è ottenere un libro sulla programmazione Linux.

Inoltre, Linux non fornisce un'API predefinita per la gestione delle finestre come Windows, quindi se si sta programmando un'applicazione grafica, è necessario scegliere anche una libreria di finestre.

1

windows.h significa che l'applicazione utilizza l'API del sistema operativo Windows, non esiste una mappatura 1 a 1 su altre librerie su Linux.

È possibile considerare l'esecuzione dell'applicazione in Wine se non si desidera eseguire il port dell'applicazione.

0

Linux ha un modello di programmazione piuttosto diverso rispetto a Windows. Se sei interessato a programmare una porta seriale (RS485 è simile a RS232) here è un tutorial che dovrebbe mostrarti le basi.

1

Hai 2 opzioni.

  1. Immettere i tipi mancanti nei tipi adatti al nuovo sistema operativo.
  2. Riscrivi il codice per non utilizzare quei tipi.

Dubito che qualcuno sarà in grado di dirti cosa dovresti fare con la porta senza conoscere le specifiche di ogni caso. La cosa su windows.h è che si basa sul sistema operativo Windows ... dovrai cambiare le funzioni che stai chiamando da esso. In questo caso non utilizzerai più i tipi che non hai.
Fondamentalmente dovrete capire a cosa serve l'API di Windows e trovare le funzioni equivalenti per il vostro SO di destinazione.

11

Non c'è "equivalente", per così dire, per windows.h in Linux, è necessario correggere gli errori caso per caso, o meglio, riscrivere il codice per Linux (se non è troppo complicato).

Tuttavia, se ignoriamo le finestre API specifiche, si può essere in grado di correggere gli errori di typedef (DWORD, Maniglia, ...):

#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

Problemi correlati