gra*_*bot 7 pinvoke winapi f# 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);
}
Run Code Online (Sandbox Code Playgroud)
这就是我到目前为止所拥有的.
type LASTINPUTINFO = {
cbSize : UInt32;
dwTime : UInt32;
}
type IdleTimer =
[<DllImport("User32.dll")>]
[<return: MarshalAs(UnmanagedType.Bool)>]
extern GetLastInputInfo(plii : LASTINPUTINFO ref)
Run Code Online (Sandbox Code Playgroud)
kvb*_*kvb 10
除了Brian的评论之外,值得指出的是F#extern签名相当忠实地反映了C签名,因此不是使用[<In>][<Out>]引用上的属性,而是可以将参数声明为LASTINPUTINFO* plii,然后将引用传递给本地实例在调用函数时使用&&运算符.
老实说,我没有尝试过运行或使用它,但这会编译,并希望能引导你朝着正确的方向前进.
open System
open System.Runtime.InteropServices
[<Struct>]
type LASTINPUTINFO =
val cbSize : UInt32
val dwTime : UInt32
module IdleTimer =
[<DllImport("User32.dll")>]
extern [<MarshalAs(UnmanagedType.Bool)>] bool GetLastInputInfo([<In>][<Out>] LASTINPUTINFO plii)
Run Code Online (Sandbox Code Playgroud)