2016-03-03 20 views
0

我试图使用dyn.load命令来加载外部的dll库,但它每次运行命令后关闭我的R会话。我使用Windows 10,这里是我的[R版本: dyn.load崩溃没有任何线索

版_
平台x86_64的-W64-mingw32的
拱x86_64的
OS的mingw32
系统x86_64的,mingw32的
状态
大3
未成年人1.3
年2015年
月03日
天09
SVN修订版67962
咒骂r
version.stringř版本3.1.3(2015年3月9日) 昵称平滑人行道

来测试此,这里是一个简单的代码来锁定屏幕使用Windows原生DLL:

dyn.load("C:\\Windows\\System32\\user32.dll") 
.Call("LockWorkStation") 

它锁定我的屏幕,但当我登录回来,我的R会话崩溃。

回答

1

dyn.load()并不是一种通常加载DLL的方式,而是加载由R编译器工具链创建的DLL,如Writing R Extensions手册中所述。

的DLL可以通过在Makevars.win链接到他们可以使用文件

PKG_LIBS = -L$(XXX_DIR)/lib -lxxx 

如在部分1.2.1 Using Makevars的端讨论,但是这意味着绕DLL编写C包装。

我不是Windows和R方面的专家,在R中依赖特定于平台的库是非常不寻常的,所以请在我的评论中加入一点盐。

+1

见段[5.3 dyn.load和dyn.unload(HTTPS使用普通的DLL:/ /cran.r-project.org/doc/manuals/r-release/R-exts.html#dyn_002eload-and-dyn_002eunload)和[5.5创建共享对象](https://cran.r-project.org/ DOC /手册/ R-释放/ R-exts.html#创建共享对象)。 –

+0

有无论如何使用通用的DLL在R,哪些源代码不可用? –

+0

我更新了我的答案。 –

0

看来它会起作用,如果我将.Call更改为.C。 我得出结论:如果你知道如何(使用.Call.C.External或许.Fortran)来运行DLL函数,你可以在R.

+0

。C忽略(期望void?)它的调用的返回值,并且只有R数据类型将作为输入被支持,所以听起来不像这通常工作。 –