Страница: 1 |
Страница: 1 |
Вопрос: работа с dll программно
Добавлено: 23.11.09 19:36
Автор вопроса: power_2007_pro
Откопал в инете код (на С вроде):
// LoadLibrary и GetProcAddress, чтобы получить
// доступ к myPuts из Myputs.dll.
#include <stdio.h>
#include <windows.h>
typedef int (*MYPROC)(LPTSTR);
VOID main(VOID)
{
HINSTANCE hinstLib;
MYPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;
// Получим дескриптор модуля DLL.
hinstLib = LoadLibrary(TEXT("myputs"));
// Если дескриптор допустимый, то попробуем получить
// адрес функции.
if (hinstLib != NULL)
{
ProcAdd = (MYPROC) GetProcAddress(hinstLib, TEXT("myPuts"));
// Если адрес функции правильный, то вызываем функцию.
if (NULL != ProcAdd)
{
fRunTimeLinkSuccess = TRUE;
(ProcAdd) (TEXT("Message via DLL function\n"));
}
// Освобождаем модуль DLL.
fFreeResult = FreeLibrary(hinstLib);
}
// Если вы не в состоянии вызывать функцию DLL,
// используйте альтернативу.
if (! fRunTimeLinkSuccess)
printf("Message via alternative method\n");
}
помогите пожалуйста перевести на мой любимый VB, а то сам как то пытался и ничё не смог:
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Sub Command1_Click()
a = LoadLibrary("C:\WINDOWS\system32\user32.dll")
If a Then
b = GetProcAddress(a, "MessageBox") ' не разобрался тут чуть чуть
Else
MsgBox "Не найдена DLL"
End If
End Sub
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #1
Добавлено: 24.11.09 01:49
MessageBoxA, наверно все же.
Номер ответа: 2
Автор ответа:
power_2007_pro
Вопросов: 6
Ответов: 1
Профиль | | #2
Добавлено: 24.11.09 20:12
Всё равно не работает ((((( Может потомучто без параметров? А вот как передать не понятно
Номер ответа: 3
Автор ответа:
SSTREGG
Вопросов: 3
Ответов: 64
Профиль | | #3
Добавлено: 24.11.09 21:59
p.s. если так не работает, смотри что возвращает GetLastError()
Номер ответа: 4
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #4
Добавлено: 24.11.09 23:00
Я думаю у тебя всё работает и получаешь адрес функции в b. А вот как на бейсике вызывать функции по адресу, я с этим не парился, не знаю)
Номер ответа: 5
Автор ответа:
VerhoLom
Вопросов: 20
Ответов: 285
Профиль | | #5
Добавлено: 25.11.09 10:06
Почитайте вот эти статьи и немного подучите ассемблер - и будет возможность вызвать функции по указателю:
http://vbstreets.ru/VB/Articles/65976.aspx
http://vbstreets.ru/VB/Articles/66035.aspx
http://www.dotfix.net/doc/Asm2VB.htm
http://www.dotfix.net/doc/asmtovb2.htm
Номер ответа: 6
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #6
Добавлено: 26.11.09 11:36
В большинстве случаев даже асм знаеть не надо. CallWindowProc вполне достаточно.