Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Переменный путь для dll в vba


Автор: Langaru 29.3.2018, 14:27
Доброго времени суток!
Имеется файл dll и есть желание использовать его в своём проекте. 
При прописывании полного пути нахождения этого файла - всё работает прекрасно.
Код

Private Declare Function get_global_param_string_private Lib "C:\Probe\CoolProp_stdcall.dll" Alias "_get_global_param_string@12" (ByVal param As String, ByVal output As String, ByVal n As Integer) As Long

Собственно вопрос. Что нужно сделать, чтобы функции из данной библиотеки работали, когда dll находится в одной папке с ексель документом, вне зависимости от абсолютного пути папки.
При объявлении только имени dll - вылезает ошибка "File not found".
P.s. Данная библиотека свободно распространяема. Входит в состав программы Coolprop.org.

Автор: Naghual 29.3.2018, 14:31
Найти в реестре регистрационную запись этой ДЛЛ.
Если есть - взять путь к существующей оттуда.
Если нет - Зарегистрировать и, см.п.1.

Автор: Langaru 29.3.2018, 14:41
Цитата(Naghual @ 29.3.2018,  14:31)
Найти в реестре регистрационную запись этой ДЛЛ.
Если есть - взять путь к существующей оттуда.
Если нет - Зарегистрировать и, см.п.1.

Проект должен работать на компьютерах с правами пользователя. Зарегистрировать библиотеку не представляется возможным.

Автор: Akina 29.3.2018, 15:16
Цитата(https://msdn.microsoft.com/en-us/library/aa716201(v=vs.60).aspx)

If you do not specify a path for libname, Visual Basic will search for the file in the following order:


  • Directory containing the .exe file

  • Current directory

  • Windows system directory (often but not necessarily \Windows\System)

  • Windows directory (not necessarily \Windows)

  • Path environment variable



Так что не указывай путь, а DLL клади в папку с исполняемым файлом. Дополнительно - на всякий случай при открытии файла устанавливай текущий каталог, равный каталогу местоположения файла.

Автор: Langaru 29.3.2018, 15:37
Цитата(Akina @ 29.3.2018,  15:16)
Цитата(https://msdn.microsoft.com/en-us/library/aa716201(v=vs.60).aspx)

If you do not specify a path for libname, Visual Basic will search for the file in the following order:



  • Directory containing the .exe file


  • Current directory


  • Windows system directory (often but not necessarily \Windows\System)


  • Windows directory (not necessarily \Windows)


  • Path environment variable




Так что не указывай путь, а DLL клади в папку с исполняемым файлом. Дополнительно - на всякий случай при открытии файла устанавливай текущий каталог, равный каталогу местоположения файла.

Читал, пробовал. Не прокатило. У меня пишет, что файл не найден.
Всё закинул по ссылке.

https://yadi.sk/d/1_DDqSh53TstjV

Автор: Akina 29.3.2018, 15:49
Код

Private Sub Workbook_Open()
ChDrive (Left(ThisWorkbook.Path, 2))
ChDir (ThisWorkbook.Path)
End Sub

Ошибки при загрузке не возникает.
В режиме отладки импортированные функции вроде работают...

Автор: Langaru 29.3.2018, 16:04
Цитата(Akina @ 29.3.2018,  15:49)
Код

Private Sub Workbook_Open()
ChDrive (Left(ThisWorkbook.Path, 2))
ChDir (ThisWorkbook.Path)
End Sub

Ошибки при загрузке не возникает.
В режиме отладки импортированные функции вроде работают...

Добавил. Пробовал это и раньше. У меня результат тот же.

https://yadi.sk/i/-7zgXTlY3TsxXh

https://yadi.sk/i/dd3ppu6H3TsxV9

Автор: Akina 29.3.2018, 16:13
Сейчас проверил ещё раз "вчистую": распаковал архив в папку, открыл файл (система безопасности заблокировала макросы), открыл VBA-редактор, добавил код, закрыл с сохранением, открыл - ошибки нет, значения в ячейках пересчитаны с нуля на соотв. ненулевые. См. аттач.

Так что ищи косяк в другом месте... например в настройках центра безопасности экселя.

Автор: Langaru 29.3.2018, 17:38
Цитата(Akina @ 29.3.2018,  16:13)
Сейчас проверил ещё раз "вчистую": распаковал архив в папку, открыл файл (система безопасности заблокировала макросы), открыл VBA-редактор, добавил код, закрыл с сохранением, открыл - ошибки нет, значения в ячейках пересчитаны с нуля на соотв. ненулевые. См. аттач.

Так что ищи косяк в другом месте... например в настройках центра безопасности экселя.

Проделал тоже самое. Завелось.
Переместил в другую папку всем составом - опять не работает.
После этого открыл тот файл, где работало - там также не работает.

Автор: Langaru 30.3.2018, 13:25
Протестировал на 13 разных компах - нигде не работает.
Можно пример работающего файла, чтобы от него плясать?


Всё, окончательно запутался. Но работает.
Запустил этот файл через Libre Calc, он мне выдал связи с какими то файлами (эксель утверждал, что ничего нет). Грохнул все связи. Переоткрыл в экселе из проводника - всё работает.
Запускаю тот же файл из UnrealComander - не работает. Закрываю, открываю из проводника - работает. Эксель только 1. Всегда открывается в нём.
Объяснения не нашёл.

Всем благодарности. Тему можно закрывать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)