从 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 包,我是它的忠实粉丝。
我尝试访问 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 包,我是它的忠实粉丝。