Страница: 1 |
Вопрос: Создание и использование DLL в VB и VBA | Добавлено: 28.08.08 20:19 |
Автор вопроса: ![]() |
Значит вот собственно тема
В VB создаю новый проект ActiveX DLL, там пишу такую простую функцию: Public Function Sum(ByVal a As Integer, ByVal b As Integer) As Integer
Sum = a + b End Function Затем создаю DLL: File -> Make MyDll.dll, все, DLL готова. Дальше создаю новый VB проект, ставлю кнопочку и пишу тама: Declare Function Sum Lib "MyDll.dll" (ByVal a As Integer, ByVal b As Integer) As Integer
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 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 2 Ответов: 4 |
Профиль | Цитата | #2 | Добавлено: 29.08.08 13:59 |
Хорошо, убираю строчку Declare, пишет Sub or Function not defined. ???
Так, теперь пишу: Private Sub Form_Load()
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 Автор ответа: ![]() ![]() ![]() 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 Автор ответа: ![]() ![]() ![]() ICQ: 308-534-060 Вопросов: 20 Ответов: 1860 |
Web-сайт: Профиль | Цитата | #5 | Добавлено: 29.08.08 15:16 |
Jen, хм.. У меня нет под рукой VB6, а на вскидку я не скажу сейчас наверняка. По-моему, надо для ActiveX DLL создать свой модуль класса, в нем создать свой собственный класс, инициализировать. А процедуру/функцию нужно оформлять как метод класса. На счёт глобально-объявленных подпрограмм не помню. |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ICQ: 308-534-060 Вопросов: 20 Ответов: 1860 |
Web-сайт: Профиль | Цитата | #6 | Добавлено: 29.08.08 15:46 |
Сделай проще - качай любой пример ActiveX DLL с сайта и посмотри как это сделано, все вопросы отпадут сами собой. Но API'шную, т.е. нативную DLL на на VB6 не пишут. Есть для этого Power Basic, С, C++ , ассемблер и др. инструменты. Удачи! |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #7 | Добавлено: 30.08.08 00:22 |
Создаешь UserControl (он же ActiveX по сути) пишешь в нем нужную функцию, компилируешь - получается компонент ocx or dll не помню - пофиг. Берешь его потом и подключаешь как и любой другой компонент. |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ICQ: 308-534-060 Вопросов: 20 Ответов: 1860 |
Web-сайт: Профиль | Цитата | #8 | Добавлено: 02.09.08 09:38 |
HACKER, ну ты меня удивил. |
Страница: 1 |
|