Как использовать dll's в том же каталоге как файл Excel

Я использовал это, чтобы найти лучшие процессы, использующие обработчик файлов для данного пользователя (имя пользователя), где нет доступа к lsof или root:

for pid in `ps -o pid -u username` ; do echo "$(ls /proc/$pid/fd/ 2>/dev/null | wc -l ) for PID: $pid" ; done  | sort -n | tail
8
задан Community 23 May 2017 в 11:45
поделиться

3 ответа

Вот три возможности для динамической загрузки / вызова DLL из VBA, включая ссылки на соответствующую информацию и некоторый пример кода. Не могу сказать, что мне когда-либо приходилось использовать какое-либо из описанных там решений, но это кажется разумным исследованием вариантов в свете потребности VBA в статическом пути.

  1. Создайте новый модуль во время выполнения (вы можете импортировать файл .bas с диска, не нужно жестко кодировать модуль с помощью строковых литералов), используя VBIDE Extensibility API. Недостаток: отсутствие проверки во время компиляции; вам нужно будет использовать строковые вызовы Application.Run для его вызова. Требуется доверенный программный доступ к VBIDE API (т.е. вы позволяете VBA выполнять код, который генерирует код, который затем выполняется ... как это делают макровирусы).
  2. Используйте LoadLibrary Win32 API ... и теперь у вас есть указатели и адреса: этот страшный код (загрузка .zip) - это, по сути, огромный неподдерживаемый взлом, который использует сборку язык, чтобы разрешить вызов функций API по имени. Похоже, это работает только для подмножества поддерживаемых функций Win32 API.
  3. Измените путь поиска DLL, но тогда также требует добавления динамического кода во время выполнения, так что можно также использовать

Вот еще одно возможное решение , которое предлагает программно обновить переменную среды PATH перед вызовом вашей DLL. Неплохая идея, если это сработает, так как вы можете добавить это к событию открытия книги.

Удачи!

zip download) - это, по сути, огромный неподдерживаемый взлом, который использует язык ассемблера для включения вызова функций API по имени. Похоже, это работает только для подмножества поддерживаемых функций Win32 API.
  • Измените путь поиска DLL, но тогда также требует добавления динамического кода во время выполнения, так что можно также использовать
  • Вот еще одно возможное решение , которое предлагает программно обновить переменную среды PATH перед вызовом вашей DLL. Неплохая идея, если это сработает, так как вы можете добавить это к событию открытия книги.

    Удачи!

    zip download) - это, по сути, огромный неподдерживаемый взлом, который использует язык ассемблера для включения вызова функций API по имени. Похоже, это работает только для подмножества поддерживаемых функций Win32 API.
  • Измените путь поиска DLL, но тогда также требует добавления динамического кода во время выполнения, так что можно также использовать
  • Вот еще одно возможное решение , которое предлагает программно обновить переменную среды PATH перед вызовом вашей DLL. Неплохая идея, если это сработает, так как вы можете добавить это к событию открытия книги.

    Удачи!

    но тогда также требует добавления динамического кода во время выполнения, так что можно также пойти с вышеупомянутым.

    Вот другое потенциальное решение , которое предлагает программное обновление переменной среды PATH до для вызова вашей DLL. Неплохая идея, если это сработает, так как вы можете добавить это к событию открытия книги.

    Удачи!

    но тогда также требует добавления динамического кода во время выполнения, так что можно также пойти с вышеупомянутым.

    Вот другое потенциальное решение , которое предлагает программное обновление переменной среды PATH до для вызова вашей DLL. Неплохая идея, если это сработает, так как вы можете добавить это к событию открытия книги.

    Удачи!

    3
    ответ дан 6 December 2019 в 00:08
    поделиться

    Вы можете поместить DLL в какой-нибудь каталог и добавить ее в путь EnVar.

    -1
    ответ дан 6 December 2019 в 00:08
    поделиться

    ActiveWorkbook.Path дает вам полный путь к папке, содержащей текущую активную книгу. Итак, попробуйте следующее:

    Declare Sub FortranCall Lib ActiveWorkbook.Path & "\Fcall.dll" (r1 As Long, ByVal num As String)
    
    -2
    ответ дан 6 December 2019 в 00:08
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: