Что я должен использовать вместо Windows.h в linux [закрыто]

Я пытаюсь портировать программу Windows в Linux. Я никогда не программировал в Linux и очень мало знаю, что я делаю. Мне удалось устранить множество ошибок, которые я получил в компиляторе G++ в Linux, и проследить большинство оставшихся до несуществующих типов переменных.

Я вынул windows.h файл, но я знаю, что делать с CALLBACK, HANDLE, DWORD и HHOOK переменные. По-видимому, нет эквивалента HANDLE в Linux, поэтому я думаю Возможно, мне придется переписать часть структуры.

может ли кто-нибудь объяснить, что я должен делать или указать мне на некоторые учебники, которые учат меня, как делать эти вещи в Linux?

моя программа запускает цикл опроса в сети RS-485, если это помогает.

5 ответов


отсутствующие typedefs (HANDLE etc.- это не твоя проблема. Ваша проблема в том, что Linux и Windows имеют совершенно разные API, вы не можете просто надеяться на перенос одного на другой, заменив несколько определений типов.

полная зависящая от платформы часть вашего кода должна быть заменена. Поэтому ваш первый шаг-изучить API Linux. Лучший способ сделать это-получить книгу по программированию в Linux.

кроме того, Linux не предоставляет значение по умолчанию API для управления окнами, как и Windows, поэтому, если вы программируете графическое приложение, вам также нужно выбрать библиотеку окон.


нет "эквивалента", так сказать, для windows.h в Linux вам нужно исправить свои ошибки в каждом конкретном случае или лучше переписать код для linux (если это не слишком сложно).

однако, если мы игнорируем определенные API windows, вы можете исправить ошибки 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


окна.h означает, что ваше приложение использует API операционной системы Windows, в Linux нет сопоставления 1-к-1 с другими библиотеками.

вы можете рассмотреть возможность запуска приложения под Wine, если вы не хотите порт приложения.


У вас есть 2 варианта.

  1. Typedef отсутствующие типы типов, которые подходят для вашей новой ОС.
  2. переписать код, чтобы не использовать эти типы.

Я сомневаюсь, что кто-нибудь сможет сказать вам, что вы должны делать с портом, не зная особенностей каждого случая. Насчет окон.h заключается в том, что он полагается на ОС windows... вам придется изменить функции, которые вы вызываете из него. В этом случае вас больше не будет использование типов, которых у вас нет.
В основном вам нужно будет понять, для чего используется API windows, и найти эквивалентные функции для вашей целевой ОС.


Linux имеет совершенно другую модель программирования для Windows. Если вас интересует Программирование последовательного порта (RS485 похож на RS232)здесь - это учебник, который должен показать вам основы.