如何使用dyn.load获取加载到R中的DLL内的函数列表

时间:2017-01-18 15:04:15

标签: c++ r dll

几年前,我写了一个带有运行水文模型功能的dll。我忘记了dll中函数的名称和参数,遗憾的是我忘了编写一个好的文档文件。功能很复杂,所以我不想通过我可以使用的替代方法来重写代码。

我已将我的dll加载到R中,但正如我所说,我既不记得函数的名称也不记得函数的语法。

如何列出函数以及如何查看函数的语法和我应该提供的参数?我知道这些论点是常见的模型输入,但说实话,我不记得格式。

另外加载dll并不会出错,但检查它是否加载会产生 FALSE 。我该如何解决这个问题?

> x<-dyn.load("hbv_R64.dll")
> is.loaded("hbv_R64")
[1] FALSE

2 个答案:

答案 0 :(得分:3)

如果hbv_R64.dll具有名为is.loaded("hbv_R64")的符号(函数),

TRUE将仅返回hbv_R64

您可以使用getDLLRegisteredRoutines获取已注册名称的列表(不一定是源代码中的名称)和界面。

R> dlls <- getLoadedDLLs()
R> getDLLRegisteredRoutines(dlls$base)
                   .Call .Call.numParameters .Fortran .Fortran.numParameters
1      R_addTaskCallback                   4    dqrcf                      8
2 R_getTaskCallbackNames                   0   dqrdc2                      9
3   R_removeTaskCallback                   1   dqrqty                      7
4                                               dqrqy                      7
5                                              dqrrsd                      7
6                                               dqrxb                      7
7                                               dtrco                      6

在你的情况下:

x <- dyn.load("hbv_R64.dll")
getDLLRegisteredRoutines(x)

?getDLLRegisteredRoutines说,&#34;将来,我们还会提供有关参数类型的信息。&#34;因此,信息已经可以访问,但我不确定如何。

答案 1 :(得分:-1)

最佳解决方案:使用反汇编。

使用工具(例如http://www.nirsoft.net/utils/dll_export_viewer.html)很容易阅读这些功能,但很难找到参数。