У меня есть DLL, и мне нужно вызвать ее, используя LoadLibrary("func1.dll")
.Полный путь к func1.dll
опускается из LoadLibrary
, потому что я должен установить переменную PATH
в место, где находится func1.dll
, поскольку func1.dll
ссылается на другую DLL с именем func2.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 Declare Function SetEnvironmentVariable Lib "kernel32" Alias "SetEnvironmentVariableA" (ByVal lpName As String, ByVal lpValue As String) As Long
Private Sub t1()
Dim lb As Long
Dim dllpath As String
dllpath = "C:\temp\DllsOffice\DLLsOffice\Debug"
SetEnvironmentVariable "PATH", dllpath
Debug.Print Environ("PATH")
lb = LoadLibrary("func1.dll")
MsgBox lb
FreeLibrary lb
End Sub
, который прекрасно работает для VBA офисов 2007, 2010, 2013, 2016 и даже Office 2019. 32 и 64 бита.
Проблема возникает при записи приведенного выше кода в VBA Office, установленного из Магазина Microsoft: ![enter image description here](https://i.stack.imgur.com/bwQmk.png)
При запуске вышеуказанного кода VBA в Office из Магазина Microsoftстрока:
LoadLibrary("func1.dll")
возвращает 0, что означает, что DLL не была загружена.Итак, у меня закончились идеи, чтобы заставить это работать, но пока безуспешно.
Вот дополнительная информация о проблеме и о том, что я пытался сделать:
Копирование DLL в путь к исполняемому файлу.Например, если я помещу func1.dll
(и func2.dll
) в C:\Program Files (x86)\Microsoft Office\Office14
, я могу использовать LoadLibrary
без необходимости использования SetEnvironmentVariable "PATH", dllpath
.Но я не могу скопировать DLL по пути Office из Microsoft Store C:\Program Files\WindowsApps\Microsoft.Office.Desktop.Word_16040.10827.20181.0_x86__8wekyb3d8bbwe\Office16
, потому что он дает доступ запрещен;
Я полностью уверен, что SetEnvironmentVariable "PATH", dllpath
работает нормально на Office из Microsoft Store,Я проверил это, поместив исполняемый файл в C:\temp\DllsOffice\DLLsOffice\Debug
и затем вызвав Shell "test.exe"
(без указания полного пути), моя программа test.exe
открывается нормально.
Делай то, что я 'м отсутствует или есть какие-либо идеи для меня, чтобы следовать?Спасибо вам всем.