Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Создание и использование DLL в VB и VBA Добавлено: 28.08.08 20:19  

Автор вопроса:  Jen
Значит вот собственно тема
В 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-сайт: domkratt.com
 Профиль | | #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. ???

Так, теперь пишу:
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
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #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-сайт: domkratt.com
 Профиль | | #4
Добавлено: 29.08.08 14:43
А при чем тут UserDocument? Ты не то делаешь =) Гугли мануалы, ибо щас расписывать это все я не буду.

Ответить

Номер ответа: 5
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #5
Добавлено: 29.08.08 15:16
Jen, хм.. У меня нет под рукой VB6, а на вскидку я не скажу сейчас наверняка. По-моему, надо для ActiveX DLL создать свой модуль класса, в нем создать свой собственный класс, инициализировать. А процедуру/функцию нужно оформлять как метод класса. На счёт глобально-объявленных подпрограмм не помню.

Ответить

Номер ответа: 6
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #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-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #8
Добавлено: 02.09.08 09:38
HACKER, ну ты меня удивил.

Ответить

Страница: 1 |

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



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