Что я должен использовать вместо 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) здесь - это учебник, который должен показать вам основы.