我必须将程序迁移到使用Windows HANDLE和DCB的Linux,例如:
int DLMSClient::GXGetCommState(HANDLE hWnd, LPDCB DCB) { //code }
我如何将这些迁移到Linux?
从here开始,我已经想出了如何迁移DWORD,WORD和BYTE,但我将如何处理这些新类型呢?
此外,我可以帮助您了解此过程的来源。
答案 0 :(得分:2)
您可能正在使用串行端口,但在Linux中,串行端口的管理方式与Windows中的方式略有不同。它们之间没有简单的一对一映射。此外,在Linux中,串口是终端,它们可能让您大吃一惊。
我会试着解释一下:
HANDLE
将映射到Linux文件描述符。这是一个简单的int
值。HANDLE
CreateFile("\\\\.\\COM1", ...)
。在Linux中,您可以使用open("/dev/ttyS0", O_RDWR | O_NOCTTY)
获取它。 O_NOCTTY
标志是为了避免使这个端口成为你的控制终端(你不需要一个令人惊讶的控制终端!)。HANDLE
关闭CloseHandle(handle)
。在Linux中,使用close(fd)
。BuildCommDCB()
和SetCommState(...)
配置串行端口。在Linux中,您可以使用tcgetattr()
,cfmakeraw()
,cfsetspeed()
和tcsetattr()
以及其他...您可能需要raw
模式。WriteFile()
发送数据,并使用ReadFile()
接收数据。在Linux中,您使用read()
和write()
。我希望这足以让你开始。
答案 1 :(得分:1)
HANDLE
被定义为指向void的指针(PVOID
= void*
)
(见:https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751%28v=vs.85%29.aspx)
LPDCB
被定义为"指向DCB结构的指针"
(见:https://msdn.microsoft.com/en-us/library/windows/desktop/aa363214%28v=vs.85%29.aspx)