web-dev-qa-db-fra.com

Que devrais-je utiliser à la place de windows.h sous linux

J'essaie de porter un programme Windows sous Linux. Je n'ai jamais programmé sous Linux et j'ai très peu idée de ce que je fais. J'ai réussi à éliminer beaucoup des erreurs que j'ai eues dans le compilateur G ++ sous Linux et j'ai tracé la plupart des erreurs restantes sur des types de variables inexistants. 

J'ai sorti le fichier windows.h mais je sais que faire avec les variables CALLBACK, HANDLE, DWORD et HHOOK. Apparemment, il n'y a pas d'équivalent de HANDLE sous Linux, je pense donc devoir réécrire une partie de la structure.

Quelqu'un peut-il expliquer ce que je devrais faire ou m'indiquer des tutoriels qui m'apprennent à faire ces choses sous Linux?

Mon programme exécute une boucle de scrutation sur un réseau RS-485 si cela aide.

16
Skeith

Les caractères manquants (HANDLE etc.) ne sont pas votre problème. Votre problème est que Linux et Windows ont des API complètement différentes, vous ne pouvez pas simplement espérer en transférer une à l’autre en remplaçant quelques définitions de types.

La partie complète de votre code dépendant de la plate-forme doit être remplacée. Votre première étape consiste donc à apprendre l’API Linux. La meilleure façon de faire est d’obtenir un livre sur la programmation Linux.

De plus, Linux ne fournit pas d’API par défaut pour la gestion des fenêtres, contrairement à Windows. Par conséquent, si vous programmez une application graphique, vous devez également choisir une bibliothèque de fenêtrage.

19
Konrad Rudolph

Il n'y a pas d '"équivalent", pour ainsi dire, sous Windows.h sous Linux, vous devez corriger vos erreurs au cas par cas ou, mieux, réécrire votre code pour Linux (si ce n'est pas trop compliqué).

Toutefois, si nous ignorons les API spécifiques à Windows, vous pourrez peut-être corriger les erreurs 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

code source typedef

13
Soufiane Hassou

windows.h signifie que votre application utilise l'API du système d'exploitation Windows. Il n'y a pas de mappage 1-à-1 vers d'autres bibliothèques sous Linux.

Vous pouvez envisager d'exécuter votre application sous Wine si vous ne souhaitez pas porter l'application.

1
Ahmed Khalaf

Vous avez 2 options.

  1. Tapez vos types manquants sur des types adaptés à votre nouveau système d'exploitation.
  2. Réécrivez le code pour ne pas utiliser ces types.

Je doute que quiconque puisse vous dire ce que vous devriez faire avec le port sans connaître les détails de chaque cas. Le problème à propos de windows.h est qu’il s’appuie sur le système d’exploitation de Windows ... vous devrez modifier les fonctions que vous appelez à partir de celui-ci. Dans ce cas, vous n'utiliserez plus les types que vous n'avez pas.
En gros, vous devez comprendre à quoi sert l’API Windows et trouver les fonctions équivalentes pour votre système d’exploitation cible.

1
Dennis

Linux a un modèle de programmation assez différent de Windows. Si vous souhaitez programmer un port série (RS485 est similaire à RS232) ici est un tutoriel qui devrait vous montrer les bases.

0
doron