winapi - 使用 MarshalAs 的 P/Invoke 签名的 F# 语法

标签 winapi f# pinvoke marshalling

我不确定这个的语法。我正在尝试将此 C# 代码转换为 F#。

struct LASTINPUTINFO
{
    public uint cbSize;
    public uint dwTime;
}

public class IdleTimer
{
    [DllImport("User32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
}

这是我到目前为止。
type LASTINPUTINFO = {
    cbSize : UInt32;
    dwTime : UInt32;
}

type IdleTimer =
    [<DllImport("User32.dll")>]
    [<return: MarshalAs(UnmanagedType.Bool)>]
    extern GetLastInputInfo(plii : LASTINPUTINFO ref)

最佳答案

除了 Brian 的评论之外,可能值得指出的是 F# extern 签名相当忠实地反射(reflect)了 C 签名,因此而不是使用 [<In>][<Out>]引用上的属性,您可能只需将参数声明为 LASTINPUTINFO* plii ,然后在调用函数时使用 && 运算符传递对本地实例的引用。

关于winapi - 使用 MarshalAs 的 P/Invoke 签名的 F# 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1689460/

相关文章:

c++ - 为什么空IP地址将计算机名解析为204.204.204.204?

f# - 是否有开源的 F# 树数据结构?

c# - 玻璃 : Solution found, 上的渲染控件需要双缓冲/完善

c++ - 在 C++ 服务和用户模式应用程序崩溃后收集崩溃的 .dmp 和 .hdmp 文件

f# - 获取拉格朗日插值的多项式表示

C# 应用程序调用 C++ 方法,错误 : PInvoke: Cannot return variants

c# - 帮助在 C# 中编码(marshal) C 函数

c# - 在 .NET 应用程序中禁用辅助功能快捷方式?

winapi - win32-如何在文本字符串周围绘制矩形?

f# - 如何在 F# 中将输入的结果转换为 int?