Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 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-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #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-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #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-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #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-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #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-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #11
Добавлено: 19.09.08 10:53
svaanir Это типично API'шное объявление и типичный API-вызов. Автора как я понял заинтересовали ActiveX DLL.

robinLib
а ЧТО за функция скрытия макросов?

Функции такой нет, не заморачивайся - это я так не точно выразился. Имеется ввиду, что некоторые используют DLL чтобы максимально спрятать свой код от любопытных глаз. А если закрыть паролем проект макросов VBA, скрыв код от глаз, то нельзя быть уверенным в том, что люди не воспользуются распространенными утилитами, раскрывающими доступ к проектам VBA. Макросы VBA очень слабо защищены от посторонних глаз. Используя ActiveX DLL ты тоже не имеешь 100% гарантии, но тем, кто возьмется исследовать твою программу прийдется намного дольше разбираться с дизассемблерами, отладчиками и кучей лишних сложностей. К тому же, чтобы исследовать откомпилированную ActiveX DLL, надо иметь неслабый багаж знаний.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам