работа с dll файломи

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
nsklital
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 21.11.2005 (Пн) 18:29

работа с dll файломи

Сообщение nsklital » 09.12.2005 (Пт) 13:23

Добрый день!
Как правельно подключятся и работать с dll файлом?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 09.12.2005 (Пт) 13:41

С каким именно DLL? C ActiveX или обычной.

С ActiveX (2 способа):
1)Топаем в меню Проект (Project)->References.
Ищим в списке нужную DLL и ставим галку, если не находим - библа не зарегистрирована - нажимаем Browse и ищем файл. Если VB ругается, значит либо это не ActiveX DLL, либо так сложились звёзды.

После того, как подключили, топаем в Object Browser (F2) и смотрим что нам даёт библа, в смысле какие классы и тд.

Потом объявляем переменные, дающие доступ к библе, например:
Код: Выделить всё

Dim [WithEvents] <имяпеременной> As [New] ИмяБиблы.ИмяКласса


2) Ещё можно с помощью CreateObject, но библа должна быть зарегистрирована. Например:
Код: Выделить всё

Dim objShell As Object
Set objShell = CreateObject("Shell.Application")


Если просто обычная Dll, с помощью Declare
Declare {Sub|Function} ИмяФункции Lib "имябиблы.dll" Alias "Псевдоним" (аргументы) As тип
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

nsklital
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 21.11.2005 (Пн) 18:29

Сообщение nsklital » 10.12.2005 (Сб) 11:34

Обычные виндовские dll.

Declare {Sub|Function} ИмяФункции Lib "имябиблы.dll" Alias "Псевдоним" (аргументы) As тип

А как узнать точно Sub это или Function псевдонима?
И как правельно узнать сколько у псевдонима аргументов и на ввод информации они или на вывод, и как правельно с аргументами работать? И запускать их.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 10.12.2005 (Сб) 12:00

Если есть только dll - никак.
Надо читать документацию по этому компоненту: либо искать в интернете, либо она должна поставляться вместе с компонентом.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Cryonyx
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 292
Зарегистрирован: 12.11.2004 (Пт) 15:40
Откуда: Net_SubStream

Сообщение Cryonyx » 10.12.2005 (Сб) 14:01

Добавлю от себя - либо проводить обратный инжиниринг и разбираться в структуре функций и их аргументах.
Если я не ошибаюсь, то функция она и в Африке функция, просто всё зависит от возвращаемого значения: null (sub) или не-null (function). Так что если тебя не интересует возвращаемое (ли?) функцией значение, то можешь смело ставить Sub - он будет работать всегда. А вот с количеством параметров - это да, засада... :D
Если тебе не по сердцу мой путь,
Выбери сам или выбери с кем,
А мне по барабану вся эта муть -
Я не червонец, чтобы нравиться всем!
© К.Кинчев
--
Мой блог: щёлкай сюда

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 10.12.2005 (Сб) 17:51

А если я не ошибаюсь, VOID или не-VOID
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Cryonyx
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 292
Зарегистрирован: 12.11.2004 (Пт) 15:40
Откуда: Net_SubStream

Сообщение Cryonyx » 10.12.2005 (Сб) 21:46

Не принципиально. Главное, мысль понята.
Если тебе не по сердцу мой путь,
Выбери сам или выбери с кем,
А мне по барабану вся эта муть -
Я не червонец, чтобы нравиться всем!
© К.Кинчев
--
Мой блог: щёлкай сюда

nsklital
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 21.11.2005 (Пн) 18:29

Сообщение nsklital » 11.12.2005 (Вс) 17:33

Ну допустим самое простое

Declare Function Beep Lib "kernel32.dll" ( _
ByVal dwFreq As Long, _
ByVal dwDuration As Long) As Long

как правельно оргонизовать чтоб работало? Я пробовал ничего не получилось.

Cryonyx
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 292
Зарегистрирован: 12.11.2004 (Пт) 15:40
Откуда: Net_SubStream

Сообщение Cryonyx » 11.12.2005 (Вс) 23:29

Вот твой пример, помещённый в форму - всё работат:
Код: Выделить всё

Private Declare Function Beep Lib "kernel32.dll" ( _
ByVal dwFreq As Long, _
ByVal dwDuration As Long) As Long

Private Sub Form_Load()
Beep 1500, 2000
End Sub
Если тебе не по сердцу мой путь,
Выбери сам или выбери с кем,
А мне по барабану вся эта муть -
Я не червонец, чтобы нравиться всем!
© К.Кинчев
--
Мой блог: щёлкай сюда

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 12.12.2005 (Пн) 9:19

Cryonyx писал(а):Не принципиально. Главное, мысль понята.

Именно это никакого значения не имеет. Если ты объявишь function как sub или sub как function, это никак не повлияет на работоспособность кода. Это связано с тем, что как ни странно, возвращаемое значение передаеться вовсе не через стек.
А вот правильный объем параметров и правильный выбор calling-conversion это действительно очень важно. Если они подобраны неправильно, после вызова функции в IDE появиться сообщение об ошибке "Bad dll conversion calling"
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Cryonyx
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 292
Зарегистрирован: 12.11.2004 (Пт) 15:40
Откуда: Net_SubStream

Сообщение Cryonyx » 12.12.2005 (Пн) 9:38

Есть ещё такая лазейка, как маршаллинг, но она, насколько мне известно, применяется только в ВБ.НЕТ, и мне не совсем ясен механизм её действия...

Может кто разъяснит?
Если тебе не по сердцу мой путь,
Выбери сам или выбери с кем,
А мне по барабану вся эта муть -
Я не червонец, чтобы нравиться всем!
© К.Кинчев
--
Мой блог: щёлкай сюда

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 12.12.2005 (Пн) 10:14

?
Разъясню.
Точно не увверен, но есть подозрение, что...
Маршалинг это копирование параметров в АП другого процесса для реализации удаленного вызова процедуры. Используеться везде и всегда для interprocess comunication. Никакого отношения к данному случаю не имеет.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

nsklital
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 21.11.2005 (Пн) 18:29

Сообщение nsklital » 14.12.2005 (Ср) 22:38

Попробывал так.
Private Declare Function Beep Lib "kernel32.dll" ( _
ByVal dwFreq As Long, _
ByVal dwDuration As Long) As Long

Private Sub Form_Load()
Beep 1500, 2000
End Sub

Нехочет пикать и все.
И не каких ошибок не выдает.
Что может быть?

Cryonyx
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 292
Зарегистрирован: 12.11.2004 (Пт) 15:40
Откуда: Net_SubStream

Сообщение Cryonyx » 14.12.2005 (Ср) 22:48

Сломанная пищалка :?: :wink:
Попробуй какую-нибудь другую функцию, ну там, shellexecute или setparent :wink:
Тогда и увидим, в чём дело..
Если тебе не по сердцу мой путь,
Выбери сам или выбери с кем,
А мне по барабану вся эта муть -
Я не червонец, чтобы нравиться всем!
© К.Кинчев
--
Мой блог: щёлкай сюда

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 15.12.2005 (Чт) 13:01

FleX_2004 писал(а):можно просто в дллке глянуть сколько параметров она кидает на стек перед ее вызовом (конечно по средствам отладчика и\или хекс редактора) =) кинуть на стек - push что нидь - скоко пушей стоко и параметров =)

Это типа модный пацан ?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

nsklital
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 21.11.2005 (Пн) 18:29

Сообщение nsklital » 18.12.2005 (Вс) 14:44

Пищалка точно работает. 100%
Но дело не в этом, я насчет beep просто пример привел чтоб понять как с dll работать. А вы уже начяли целые компьютерные радиосхемы расказывать.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 181

    TopList