Что я должен использовать вместо windows.h в linux

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

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

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

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

Ответы

Ответ 1

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

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

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

Ответ 2

Там нет "эквивалентного", так сказать, для 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

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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