Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вызов функции из DLL / 5 сообщений из 5, страница 1 из 1
11.02.2004, 10:32
    #32405141
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции из DLL
Есть такой код:
lb = LoadLibrary("Lib1.DLL")
pa = GetProcAddress(lb, "Fun1")

Как теперь вызвать функцию Fun1?
В различных примерах в Интернете встречается либо вызов этой функции в отдельном процессе например hThread = CreateThread(ByVal 0&, 0&, pa, 0&, 0&, ThreadID) либо с помощью вызова процедуры окна CallWindowProc. А можно ли просто вызвать функцию имея ее адрес то есть Call pa?
...
Рейтинг: 0 / 0
11.02.2004, 10:46
    #32405163
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции из DLL
Если ты знаешь имя функции и ее аргументы, то почему не хочешь использовать:
Declare Function NameFunction Lib "NameLibrary" Alias "AliasNameFun" (.......) As ....
...
Рейтинг: 0 / 0
11.02.2004, 11:02
    #32405199
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции из DLL
>>Если ты знаешь имя функции и ее аргументы, то почему не хочешь использовать:
>>Declare Function NameFunction Lib "NameLibrary" Alias "AliasNameFun" (.......) As ....

потому что имя вызываемой функции определяется во время выполнения программы

другими словами - как можно разыменовать указатель на функцию полученый после вызова GetProcAddress?
...
Рейтинг: 0 / 0
11.02.2004, 11:48
    #32405299
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции из DLL
Не нужно ждать от VB такой же логики в программировании линковки Dll как например у Delphi или Visual Си.

Прикол с VB заключается в том что он не различает статическую и динамическую подгрузку Dll библиотек.
Когда ты объявляешь: Declare Function NameFunction Lib ...... - это не значит, что твоя программа автоматом загрузит Dll при старте. Нифига. Она спокойно запустится даже если Dll вообще нет на компе, и только когды ты первый раз обратишься к функции из этой Dll, только тогда произойдет поиск и загрузка Dll.

Вообщем VB всячески скрывает (маскирует) работу с памятью и все делает сам, тебе не доверяет :)
...
Рейтинг: 0 / 0
12.02.2004, 14:27
    #32407192
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции из DLL
Dim lb As Long, pa As Long
'map 'user32' into the address space of the calling process.
lb = LoadLibrary("user32")
'retrieve the address of 'SetWindowTextA'
pa = GetProcAddress(lb, "SetWindowTextA")
'Call the SetWindowTextA-function
CallWindowProc pa, Me.hWnd, "Hello !", ByVal 0&, ByVal 0&
'unmap the library's address
FreeLibrary lb
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вызов функции из DLL / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]