Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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 LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
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-сайт: sharpc.livejournal.com
 Профиль | | #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
  1. Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
  2. Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
  3.  
  4. Private Sub Command1_Click()
  5. a = LoadLibrary("user32")
  6. If a Then
  7. b = GetProcAddress(a, "MessageBoxA") ' - или MessageBoxW
  8. ' у меня выдает значения:
  9. ' MessageBoxA: 2117732330
  10. ' MessageBoxW: 2117821748
  11. MsgBox b
  12. Else
  13. MsgBox "Не найдена DLL"
  14. End If
  15. End Sub

p.s. если так не работает, смотри что возвращает GetLastError()

Ответить

Номер ответа: 4
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #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 вполне достаточно.

Ответить

Страница: 1 |

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



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