gpt4 book ai didi

winapi - 将 HANDLE 转换为句柄

转载 作者:行者123 更新时间:2023-12-03 00:21:40 25 4
gpt4 key购买 nike

我想使用 CreatePipe 在 Windows 上创建匿名管道通过 FFI 访问 WinAPI。这会给我一个 HANDLE (从 Win32 haskell 包输入),但我想得到一个普通的 haskell Handle 这样我就可以使用标准的 haskell IO功能就可以了。所以我需要一个类型的函数:

win32handleToStandardHandle :: HANDLE -> IO Handle

我该如何实现这个?

在linux上,我可以使用System.Posix.IOfdToHandle函数在linux系统使用的FD类型之间进行转换调用和标准 haskell 类型。不过windows下好像没有这个功能。

最佳答案

即使在 Windows 上,System.IO 中文件的标准实现也使用文件描述符,而不是 win32 HANDLE。这些文件描述符由 C 运行时提供,而不是 Windows。要将 HANDLE 转换为文件描述符,运行时提供 _open_osfhandle功能。 GHC 在 Windows 上使用 MinGW,但 MinGW 不提供自己的 C 运行时,因此 Haskell EXE 使用 msvcrt.dll。

使用 FFI 导入_open_osfhandle。使用它将您的 HANDLE 转换为文件描述符,然后调用 fdToHandle,它似乎位于 GHC.IO.Handle.FD 中。

我还没有真正尝试过这个。

关于winapi - 将 HANDLE 转换为句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24539223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com