gpt4 book ai didi

f# - 在 F# 的模块中包装 DLL 导入

转载 作者:行者123 更新时间:2023-12-01 01:08:14 25 4
gpt4 key购买 nike

我正在尝试为 user32.dll 中的某些 windows api 函数创建一个“包装器”模块。 .我仍在学习 F#,所以我对 F# 中的继承和多态性如何工作以及如何将其应用于这种情况感到相当模糊。

我有这个模块:

module MouseControl =         
[<DllImport( "user32.dll", CallingConvention = CallingConvention.Cdecl )>]
extern void ShowCursor(bool show)

[<DllImport( "user32.dll", CallingConvention = CallingConvention.Cdecl )>]
extern void internal mouse_event(int flags, int dX, int dY, int buttons, int extraInfo)
let MouseEvent(flags, dX, dY, buttons, extraInfo) = mouse_event(flags, dX, dY, buttons, extraInfo)

我的目标是能够“隐藏” mouse_event来自使用此模块的其他代码的函数,而是将该函数公开为 MouseEvent .使用此代码, mouse_eventMouseEvent当前可用于调用此模块的代码。如何隐藏 mouse_event它在哪里是模块私有(private)的?

最佳答案

在您的代码示例中,您已经标记了 mouse_event功能为 internal - 所以原则上,您只需将其标记为 private .但是,看起来 F# 编译器忽略了 extern 上的可见性注释。成员,所以最简单的选择是将它们放在嵌套模块中并隐藏整个嵌套模块:

module MouseControl =         
module private Imported =
[<DllImport( "user32.dll", CallingConvention = CallingConvention.Cdecl )>]
extern void mouse_event(int flags, int dX, int dY, int buttons, int extraInfo)

let MouseEvent(flags, dX, dY, buttons, extraInfo) =
Imported.mouse_event(flags, dX, dY, buttons, extraInfo)

模块 Imported现在仅在 MouseControl 内可见模块。从外部,您无法访问 MouseControl.Imported 内部的任何内容.

关于f# - 在 F# 的模块中包装 DLL 导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25192002/

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