LoadLibrary в VBA возвращает 0 при попытке загрузить R.dll в Office из Microsoft Store - PullRequest
0 голосов
/ 04 июня 2018

Я выяснил, что некоторые очень специфические машины выдавали ошибку при попытке загрузить R.dll.Сначала я подумал, что это будет проблемой с McAfee, потому что 100% машин, которые я получил, были вызваны ноутбуками Dell с установленным McAfee.Но позже я обнаружил, что проблема была вызвана Office, который устанавливается с помощью Microsoft Store, а не традиционным способом (загрузка установщика и его выполнение).Office, установленный с помощью Магазина Microsoft, не позволит мне загрузить R.dll.Он возвращает ноль в следующем коде:

Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long

Private Sub TestDLL()

    Dim ret As Long
    ret = LoadLibrary("C:\Program Files\R\R-3.0.2\bin\i386\R.dll") ' returns zero
    MsgBox ret
    FreeLibrary ret

End Sub

Для того, чтобы приведенный выше код работал, вам сначала необходимо включить следующую папку в системную переменную PATH, до открытие VBA:

C:\Program Files\R\R-3.0.2\bin\i386

Приведенный выше код прекрасно работает во всех версиях Office, которые я тестировал (2007 ~ 2019) при загрузке установщика и последующей установке (без использования Магазина Microsoft).Однако, если я вхожу в Windows под своей учетной записью Microsoft, а затем использую Microsoft Store для установки Office, переменная ret возвращает ноль.Когда я говорю «Microsoft Store», я имею в виду следующее: Microsoft Store used to install Office and reproduce the problem

Я предполагаю, что R.dll не может загрузить некоторую зависимую DLL в Office (из Магазина Windows), так как она запускается в песочницеи имеет ограниченный доступ к файловой системе и, возможно, к другим системным ресурсам.

Так что, в принципе, любая информация, касающаяся вопросов ниже, поможет мне:

  1. Возможно, такая версияофис не позволит мне сделать это и точка?Поэтому я должен отказаться от версии Windows Store Office?
  2. Стоит ли пытаться отлаживать R.dll?Я знаю, что это потребует некоторых усилий для компиляции R.dll и настройки.
  3. Могу ли я ввести в вызов LoadLibrary что-то вроде try-except, чтобы получить больше информации о , почему не может загрузить R.dll?
  4. Другие идеи?

Спасибо за чтение и за предоставленную помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...