Страница: 1 |
Страница: 1 |
Вопрос: Создание и использование DLL в VB и VBA
Добавлено: 28.08.08 20:19
Автор вопроса: Jen
Значит вот собственно тема
В VB создаю новый проект ActiveX DLL, там пишу такую простую функцию:
Sum = a + b
End Function
Затем создаю DLL: File -> Make MyDll.dll, все, DLL готова.
Дальше создаю новый VB проект, ставлю кнопочку и пишу тама:
Private Sub Command1_Click()
MsgBox Sum(10, 5)
End Sub
Подключаю DLL: Project->References - ищу там свою DLL, ставлю галку.
Теперь пускаю свой проект, а он мне пишет:
Compile error: Constants, fixed-lenth strings, user-defined types and Declare statments not allowed in public members of object modules.
Как с этим бороться?
Потом пишу такй-же код в VBA, тут мне говорит:
Can't find DLL entry point Sum in MyDll.dll
А как с этим бороться?
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #1
Добавлено: 28.08.08 21:41
Ну в VB все просто, тут тебе просто не надо объявлять функцию Declare, достаточно просто подключить либу. А по поводу остального уже надоело говорить, что VB6 создает библиотеки классов, а не функций.
Номер ответа: 2
Автор ответа:
Jen
Вопросов: 2
Ответов: 4
Профиль | | #2
Добавлено: 29.08.08 13:59
Хорошо, убираю строчку Declare, пишет Sub or Function not defined. ???
Так, теперь пишу:
MsgBox UserDocument1.Sum(10, 5)
End Sub
У меня там написано в DLL:
Public Function Sum(ByVal a As Integer, ByVal b As Integer) As Integer
Member of MyDLL.UserDocument1
Теперь пишет Run time error 424
Как с этим бороться?
Сорри, что задаю вопросы наверное уже поднимавшиеся, поиск по форуму не работает, пишет Server Error in '/' Application.
Если можно объясните вкратце, или где почитать подробно можно?
Номер ответа: 3
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #3
Добавлено: 29.08.08 14:06
Executioner,
Согласен по сути, но позволь поправлю тебя в терминологии. Не бывает никаких "библиотек класссов" и "библиотек функций". VB6 умеет создавать "ActiveX DLL", т.е. COM-технологию (можете встретить также аббревиатуру OLE, по сути одно и то же).
Jen пытался вызвать функцию из ActiveX DLL сразу двумя способами: как ActiveX DLL и как из обыкновенной DLL (Dynamic Link Library, библиотека динамической компоновки, или связывания). Библиотеки второго типа широко используются в Windows как основа Windows 32-bit API (Win32 API). Эти библиотеки построены в формате файлов Portable Executable (PE), так же, как и всюду распространенные EXE. Так уж получилось, что VB6 умеет использовать эти библиотеки через объявление (Declare), но не умеет их создавать (кроме как особо извращённым способом, о котором вам лучше всего не знать).
Все, что надо сделать, чтобы программа Jen стала работать, это убрать строчку объявления.
Номер ответа: 4
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #4
Добавлено: 29.08.08 14:43
А при чем тут UserDocument? Ты не то делаешь Гугли мануалы, ибо щас расписывать это все я не буду.
Номер ответа: 5
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #5
Добавлено: 29.08.08 15:16
Jen, хм.. У меня нет под рукой VB6, а на вскидку я не скажу сейчас наверняка. По-моему, надо для ActiveX DLL создать свой модуль класса, в нем создать свой собственный класс, инициализировать. А процедуру/функцию нужно оформлять как метод класса. На счёт глобально-объявленных подпрограмм не помню.
Номер ответа: 6
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #6
Добавлено: 29.08.08 15:46
Сделай проще - качай любой пример ActiveX DLL с сайта и посмотри как это сделано, все вопросы отпадут сами собой. Но API'шную, т.е. нативную DLL на на VB6 не пишут. Есть для этого Power Basic, С, C++ , ассемблер и др. инструменты. Удачи!
Номер ответа: 7
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #7
Добавлено: 30.08.08 00:22
Создаешь UserControl (он же ActiveX по сути) пишешь в нем нужную функцию, компилируешь - получается компонент ocx or dll не помню - пофиг. Берешь его потом и подключаешь как и любой другой компонент.
Номер ответа: 8
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #8
Добавлено: 02.09.08 09:38
HACKER, ну ты меня удивил.