| Форум| Гостевая| Ссылки| Программы| Исходные тексты| Наши партнеры.|
   
| Главная| Рассылки| Услуги| Библиотека| Новости| Авторам| Программистам| Студентам|
delphi c++ assembler
 

Шаг 22 - Вызов функций из DLL - GetModuleHandle и GetProcAddress.

Итак, мы с Вами все время в разделе MFC пользуемся DLL только это использование скрыто за LIB и H файлами. Но ведь любой DLL можно вызывать и динамически. Вот пример вызова функции Win 32 API для удаления файлов - DeleteFile. Тип приложения Win32 Application.
// TestAPI.cpp : Defines the entry point for the application.
//

#include "stdafx.h"

typedef BOOL (WINAPI *hDeleteFunc)(LPSTR lpStr);

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
	hDeleteFunc hDelete=NULL;
	HMODULE hKernel32=NULL;
	hKernel32=GetModuleHandle("Kernel32");
	if (hKernel32==NULL)
	{
		MessageBox(NULL,"Error Load Kernel32","Error",MB_OK);
		return FALSE;
	}
	hDelete=(hDeleteFunc)GetProcAddress(hKernel32,"DeleteFileA");
	if (hDelete==NULL)
	{
		MessageBox(NULL,"Error Load hDelete","Error",MB_OK);
		return FALSE;
	}
    if ((*hDelete)((LPSTR)"c:\\1.txt")) MessageBox(NULL,"Deleted","Message",MB_OK);
	else MessageBox(NULL,"Not Deleted","Message",MB_OK);

	return 0;
}
Первой строкой мы с Вами создаем прототип функции для того, чтобы функция имела тип и была реализована проверка типов при передаче параметров. GetModuleHandle получает указатель на DLL.
HMODULE GetModuleHandle
(
  LPCTSTR lpModuleName   // Имя модуля
);
Эта функция возврашает указатель на модуль, если он загружен. Но Kernel32.Dll - это системная библиотека Windows и она находится в памяти всегда. Если это не так, то нужно использовать LoadLibrary
HINSTANCE LoadLibrary
(
  LPCTSTR lpLibFileName  // Имя файла DLL 
);
Вооружившись указателем на модуль мы можем получить адрес функции с помощью GetProcAddress.
FARPROC GetProcAddress
(
  HMODULE hModule,    		// указатель на модуль
  LPCSTR lpProcName   		// имя функции
);

Предыдущий Шаг | Следующий Шаг | Оглавление

By Artem.
Используются технологии uCoz
 

Rambler's Top100 Rambler's Top100

©  Adept Design Studio

Используются технологии uCoz