我正试图隐藏我的P / Invoke函数,如下所示:
[<DllImport("kernel32.dll", SetLastError=true)>]
extern bool private CreateTimerQueueTimer(IntPtr& phNewTimer, nativeint TimerQueue, WaitOrTimerDelegate Callback, nativeint Parameter, uint32 DueTime, uint32 Period, ExecuteFlags Flags)
奇怪的是,private
被忽略了 - 这真的很烦人,因为我想隐藏与这些函数相关的所有笨拙的结构和枚举。
我想我可以把所有东西放在一个私人模块中,所以这不是太大的交易,但我错过了什么?
答案 0 :(得分:0)
这将完成这项工作。
module a =
[<AbstractClass>]
type private NativeMethods() =
[<DllImport("kernel32.dll", EntryPoint="CreateTimerQueueTimer",
SetLastError=true)>]
static extern bool sCreateTimerQueueTimer( (* whatever *) )
static member CreateTimerQueueTimer = sCreateTimerQueueTimer
let usedInside = NativeMethods.CreateTimerQueueTimer
module b =
open a
// the next line fails to compile
let usedOutside = NativeMethods.CreateTimerQueueTimer( (* whatever *) )
注意:
NativeMethods
类中; a
的其余部分访问EntryPoint
来解析命名。