Страница: 1 |
Страница: 1 |
Вопрос: Работа с DLL – как: основы?
Добавлено: 07.09.08 13:24
Автор вопроса: robinLib
Доброе время суток! Есть идея поработать на VBA с DLL – т.е. перенести часть функций в DLL файл и обращаться к нему из VBA…..однако про подобные вещи я знаю лишь в теории…есть ли какой-нибудь пример – как это можно реализовать?
Ответы
Всего ответов: 11
Номер ответа: 1
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #1
Добавлено: 08.09.08 06:38
Можно создать DLL, например, на Delphi, а потом подключить ее в VBA. Пробовала один-два раза, но что-то не нужно мне оказалось пока. Есть почта, скину файлик по созданию DLL ?
Номер ответа: 2
Автор ответа:
robinLib
Вопросов: 5
Ответов: 5
Профиль | | #2
Добавлено: 08.09.08 10:10
Да если можно вот сюда jiura@rambler.ru
Номер ответа: 3
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #3
Добавлено: 08.09.08 12:21
Вопрос в том, на чем бы ты хотел переносить ход в DLL?
Если на VB6, то тебе надо в VisualBasic создавать ActiveX DLL. Есть небольшие сложности, если ты собираешься переносить свои файлы на другие компьютеры - тогда тебе надо будет везде регистрировать свою dll, например при помощи *.bat'ника и regsvr32. Зато VB6 идеально подходит для легкого переноса готовых макросов и оччень удобно работает со всеми оффисными объектными моделями.
Есть и другой вариант, что тебе предлагается. Это создание нативных dll в различных программных средах (PB/C/C++/Depphy/asm/др.). В таком случае организация макросов на VBA будет представлять собой вызов API-функций этих DLL. Прямой доступ к объектной модели Excel/Office у тебя в этом случае будет не во всех случаях и не настолько в удобной форме, как это реализовано в VB6/VBA. Чаще всего таким способом API-функции принимают параметры и возвращают результат в виде строкогого представления таблицы Excel с разделителями - табами и возвратами каретки. Плюс - не надо регистрировать нативные библиотеки.
Номер ответа: 4
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #4
Добавлено: 08.09.08 12:24
А ещё для сокрытия макросов можно использовать надстройки Excel, может тебе это подойдёт больше всего. В зависимости от задач.
Номер ответа: 5
Автор ответа:
robinLib
Вопросов: 5
Ответов: 5
Профиль | | #5
Добавлено: 11.09.08 12:25
Интересует метод именно через ActiveX DLL
Кто-нибудь дайте пожалуйста примерчик!
Номер ответа: 6
Автор ответа:
robinLib
Вопросов: 5
Ответов: 5
Профиль | | #6
Добавлено: 11.09.08 12:43
C примером разобрался, только что не ясно каким путем можнго зарегестрировать DLL библиотеку, чтобы она при открытии файла автоматически подгружалась (даже на новом компе)
TO mc-black
а ЧТО за функция скрытия макросов?
Номер ответа: 7
Автор ответа:
robinLib
Вопросов: 5
Ответов: 5
Профиль | | #7
Добавлено: 11.09.08 12:58
т.е. другими словами библиотеку саму мне зарегестрирует инсталятор, а как сделать так чтобы галочка появилась в References в Excel-е на новом компе?
Номер ответа: 8
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #8
Добавлено: 12.09.08 13:58
напиши в консоли (cmd.exe):
regsvr32 /?
Он выдаст тебе справку по использованию, т.е. как зарегистрировать и как отменить регистрацию ActiveX DLL (так же можно поступать и с ActiveX Control - *.ocx)
Создай bat два bat-файла: один регистрирует библиотеку (install.bat), другой - отменяет регистрацию (uninstall.bat). Так тебе будет проще отлаживать.
А многие нормальные инсталляторы умеют регистрировать ActiveX DLL, только при этом ты сам об этом должен иметь понимание и отличать их от нативных dll, таких как kernel32, user32, gdi32 и т.д.
Номер ответа: 9
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #9
Добавлено: 12.09.08 14:10
;install.bat
;-----------
regsvr32 /s *.dll
;uninstall.bat
;-------------
regsvr32 /u /s *.dll
если на новой машине после установки инсталлятором dll не появится в references, то это значит, что dll НЕ зарегистрирована (а в лучшем случае просто скопирована куда-то на компьютер. перед удалением программ необходимо снимать регистрацию dll в них входящих, а только потом физически их удалять
Номер ответа: 10
Автор ответа:
svaanir
Вопросов: 2
Ответов: 6
Профиль | | #10
Добавлено: 18.09.08 14:59
Вот как я использую DLL:
Public Declare Function aGenLike Lib "c:\softunion\services\library\sgenerators.dll" Alias "GenLike" (ByVal NameP As String, ByVal Poisk As String) As String
aGenLike - это мое имя функции (как я использую в VB)
sgenerators.dll - это собственно сама DLL и указан путь к ней
GenLike - эта функция внутри DLL, которой я решила воспользоваться (она написана на Делфи, формирует строку поиска)
Вызов функции вот так:
NAMEORG = aConvertStr(F)
Номер ответа: 11
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #11
Добавлено: 19.09.08 10:53
svaanir Это типично API'шное объявление и типичный API-вызов. Автора как я понял заинтересовали ActiveX DLL.
а ЧТО за функция скрытия макросов?
Функции такой нет, не заморачивайся - это я так не точно выразился. Имеется ввиду, что некоторые используют DLL чтобы максимально спрятать свой код от любопытных глаз. А если закрыть паролем проект макросов VBA, скрыв код от глаз, то нельзя быть уверенным в том, что люди не воспользуются распространенными утилитами, раскрывающими доступ к проектам VBA. Макросы VBA очень слабо защищены от посторонних глаз. Используя ActiveX DLL ты тоже не имеешь 100% гарантии, но тем, кто возьмется исследовать твою программу прийдется намного дольше разбираться с дизассемблерами, отладчиками и кучей лишних сложностей. К тому же, чтобы исследовать откомпилированную ActiveX DLL, надо иметь неслабый багаж знаний.