У меня есть пакет с именем "aaa", который имеет такую функцию:
execute_query = function(arg1,symbol_list){eval(.Call("run_query",arg1),
envir = .GlobalEnv)}
Здесь часть run_query предоставляется библиотекой DLL, которая была загружена в глобальную среду в функции .onLoad функции:
eval(dyn.load(file.path(dll_path,"liblib.dll")),envir = .GlobalEnv)
Это успешно, и я получаю этот dll в списке, когда я использую функцию getLoadedDLLs()
.
Если я копирую функцию за пределы пакета, все этоработает как задумано. Однако при попытке выполнить execute_query из пакета я получаю сообщение об ошибке:
Error in .Call("run_query", arg1) :
"run_query" not resolved from current namespace (aaa)
Я предполагаю, что eval не работает, когда речь идет о ссылках на связанные библиотеки. Как запустить функцию dll из функции пакета в глобальном пространстве имен?
Я уже пытался зарегистрировать пакет, используя library.dynam
, но учитывая, что все dll являются частью большого внешнего приложения, и я не могуположить его в пакет напрямую, это не будет работать. Я в порядке с жестким кодированием пути DLL к пакету, поэтому я бы предпочел грубые решения, такие как выполнение всего в глобальном пространстве имен, если это работает для решения проблемы.