从 R 动态加载 user32.dll 并调用外部函数

Dynamically load user32.dll from R & call external function

我尝试访问 R Session 中的 user32.dll 函数。我使用了代码:

dyn.load("c://windows//system32//user32.dll")
.External("MessageBeep", 0L)

但是 R 会话崩溃了。根据文档 .External 旨在在 R 包创建期间使用。但是,如上所示,并没有禁止使用它。

我正在使用 Windows 8 和 RStudio (1.1.453) / R (3.5.0)。你能建议一种从 R 会话调用外部 Windows 函数的正确方法吗?

阿尔乔姆,

您正在访问Win32 C API,因此您可以加载user32.dll,然后使用Foreign {base} .C()调用访问Window32 MessageBeep 函数。

示例代码

dyn.load("c://windows//system32//user32.dll")
.C("MessageBeep")

运行时输出

> dyn.load("c://windows//system32//user32.dll")
> .C("MessageBeep")
list()
> 

您应该会听到 Windows 消息 "Beep" - 唉,我还没有弄清楚如何在解决方案中包含声音(咯咯笑)。希望以上内容能帮助解决您的问题。

注意:我还建议您看一下 Rcpp 包,我是它的忠实粉丝。