Итак, мы с Вами все время в разделе 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 // имя функции );