0 / 0 / 0
Регистрация: 27.04.2015
Сообщений: 6
|
|
1 | |
Обращение к функции в dll из VBA27.04.2015, 10:56. Показов 4303. Ответов 10
Метки нет (Все метки)
Всем привет!
Буду благодарен, если поможете разобраться с проблемой работы с dll из vba: 1. Прежде всего регистрирую dll при помощи regsvr32. Здесь возникает первая проблема: если библиотека размещена на любом диске, кроме С, регистрация проходит успешно. Если кидаю в С:\Windows\System32 и пытаюсь зарегить оттуда - ошибка: "Не удалось загрузить модуль. Проверьте, что двоичный файл хранится на указанном пути или запустите отладку, чтобы диагностировать проблемы с этим двоичным файлом или зависимыми dll-файлами". 2. Плюнул на регистрацию в С:\Windows\System32 и зарегил с другого локального диска. Все ж, думаю, в регистре прописывается. Затем подключил в Tools->References Но вот незадача, при обращении к функции дебаггер выдает ошибку "file not found" Подскажите, пожалуйста: 1. Обязательно ли должна быть библиотека в С:\Windows\System32 зарегина 2. Как решить проблему? Спасибо
0
|
27.04.2015, 10:56 | |
Ответы с готовыми решениями:
10
Обращение к IE через VBA Обращение к CheckBox Vba Word Vba в power point 2013 - обращение к образцам и макетам слайдов Обращение к файлам rtf из VBA Word для копирования содержимого |
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
|
|
27.04.2015, 11:25 | 2 |
Смотря как должна использоваться эта библиотека. Если как ActiveX, т.е. через CreateObject или подключение библиотеки через Tools - References, то - да, должна быть зарегина, но необязательно должна находиться в System32.
Если библиотека используется как процедурная, т.е. через Declare Sub/Function, то - нет.
0
|
0 / 0 / 0
Регистрация: 27.04.2015
Сообщений: 6
|
||||||
27.04.2015, 11:40 [ТС] | 3 | |||||
Использую для Declare Sub/Function.
Но при выполнении кода:
file ecrt400.dll not found
0
|
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
|
|
27.04.2015, 11:53 | 4 |
Полный путь к dll пропишите.
0
|
0 / 0 / 0
Регистрация: 27.04.2015
Сообщений: 6
|
|
27.04.2015, 11:59 [ТС] | 6 |
Пробовал, не помогает.
Думал, что это из-за того, что ecrt400.dll находится не в папке C:\Windows\System32 Но проверить не могу, т.к. с этой папки не прописывается в регистры
0
|
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
|
|
27.04.2015, 12:01 | 7 |
Краткое гугление по "ecrt400.dll" показало, что нужно таки регистрировать библиотеку и использовать как COM-объект, например
http://programmer.com.ua/2013/... le-server/
0
|
0 / 0 / 0
Регистрация: 27.04.2015
Сообщений: 6
|
|
27.04.2015, 12:47 [ТС] | 8 |
Спасибо за примеры
Поиграть, к сожалению, не удалось, т.к. сейчас работаю на 64-битной машине, а декларирование ф-ий для 64-битных операционок должно содержать Declare PtrSafe Function Добавлено через 5 минут Регить нужно. Но ВБА ругается, что не видит даже после того, как я зарегил (правда не с диска С. В этом собственно и вопрос, должны ли обязательно библиотеки для ВБА региться из C:\Windows\System32? С диска F: в регистры прописывается на раз. А приведенный код по ссылке - это код для среды 1С Добавлено через 37 минут Вот обсуждение аналогичной проблемы. Не приведи бог, это вопрос китайского железа. RegSvr32 Не удалось загрузить модуль
0
|
Модератор
|
|
27.04.2015, 13:10 | 9 |
Это похоже на то, что у тебя 64-битная система, поэтому ты должен размещать DLL не в System32, а в SysWOW64, т.к. все обращения 32-битных приложений в папку System32 перенаправляются в SysWOW64.
0
|
0 / 0 / 0
Регистрация: 27.04.2015
Сообщений: 6
|
|
27.04.2015, 13:44 [ТС] | 10 |
Система 32-битная. На 64-битной работаю. А ставил все на 32-битных.
Проверил на 3-х компьютерах. Везде один и тот же результат Гуглю 2-ой день. Решения так и не нашел Есть еще идеи?
0
|
0 / 0 / 0
Регистрация: 27.04.2015
Сообщений: 6
|
||||||
28.04.2015, 17:01 [ТС] | 11 | |||||
В общем, кто ищет, тот всегда найдет.
1. Зарегистрировать dll на диске С: не удается по причине ограниченности прав и привелегий Виндой (даже для администратора). Пока полечить не удалось, но есть масса вариантов, как попробовать (но это не тема данной ветки) 2. С другого диска регистрируется на раз-два при помощи regsvr32 ecrt400.dll. Для меня загадка, но для работоспособности методов, вызываемых из данной библиотеки, сама dll-ка должна лежать в текущей папке. Лечится функцией cd в коде VBA 3. Не забываем добавить библиотеку в Tools -> References 4. Вызов через объект:
0
|
28.04.2015, 17:01 | |
28.04.2015, 17:01 | |
Помогаю со студенческими работами здесь
11
Обращение к функции DLL Обращение к ресурсам DLL из самой DLL Обращение к dll Обращение к подчиненной форме из VBA Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |