簡體   English   中英

在 R 的全局環境中使用來自 package function 的動態加載的 dll

[英]Use dynamically loaded dlls from package function in global environment in R

我有一個名為“aaa”的 package,它有一個 function,例如:

execute_query = function(arg1,symbol_list){eval(.Call("run_query",arg1),
                                           envir = .GlobalEnv)}

這里的run_query部分由一個dll提供,它已經在functions.onLoad function中加載到全局環境中:

eval(dyn.load(file.path(dll_path,"liblib.dll")),envir =.GlobalEnv)

這是成功的,當我使用getLoadedDLLs() function 時,我得到了這個 dll。

如果我將 function 復制粘貼到 package 之外,則一切正常。 但是,在嘗試從 package 執行 execute_query 時,我收到錯誤消息:

 Error in .Call("run_query", arg1) : 
  "run_query" not resolved from current namespace (aaa) 

我猜想在引用鏈接的 dll 時 eval 不起作用。 如何從 package ZC1C425268E68385D1AB5074 F 全局命名空間中運行 dll function

我已經嘗試使用library.dynam注冊 package,但考慮到 dll 都是大型外部應用程序的一部分,我不能將它直接放入 package 中,這將不起作用。 我可以硬編碼一個 dll 路徑到 package 所以我寧願一個粗略的解決方案,比如在全局命名空間中執行所有內容,如果這可以解決問題。

這里的答案是將要執行的 function 分配到全局命名空間中。 因此我們這樣做:

execute_query = function(arg1,symbol_list){eval(.Call("run_query",arg1),
                                           envir = .GlobalEnv)}
assign("execute_query", execute_query, envir = .GlobalEnv)

然后可以從 package function 或任何其他 function 調用此execute_query

它並不出色,永遠不會在 CRAN 上飛行,但它確實可以在 package 中使用外部 dll。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM