Теперь напишем программу, которая будет загружать библиотеку и запускать ловушку. Для этого создайте новый проект Win32 Project типа Windows Application. В нем надо только подкорректировать функцию _tWinMain, как в листинге 3.7.
| Листинг 3.7. Загрузка DLL-библиотеки и запуск ловушки |
// Initialize global strings LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_OPENPASSTEST, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance);
// Perform application initialization: if (!InitInstance (hInstance, nCmdShow)) { return FALSE; }
hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_OPENPASSTEST);
////////////////////////////////////// // Следующий код необходимо добавить LONG lResult; HINSTANCE hModule;
// Создаем новый указатель на функцию typedef void (RunStopHookProc)(bool, HINSTANCE);
RunStopHookProc* RunStopHook = 0;
// Load the DLL file (Чтение DLL-библиотеки) hModule = ::LoadLibrary("OpenPassDLL.dll");
// Получить адрес функции в библиотеке RunStopHook = (RunStopHookProc*)::GetProcAddress( (HMODULE) hModule, "RunStopHook");
// Выполнить функцию (*RunStopHook)(true, hInstance);
// Main message loop: while (GetMessage(msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, msg)) { TranslateMessage(msg); DispatchMessage(msg); } }
(*RunStopHook)(false, hInstance); FreeLibrary(hModule);
return (int) msg.wParam; }
Так как функция описана в динамической библиотеке, а использоваться будет в другой программе, то необходимо указать тип вызываемой функции. Если что-то указать неправильно, то вызов будет невозможным. Описание функции делается так:
typedef void (RunStopHookProc)(bool, HINSTANCE);
Таким образом, описывается тип функции RunStopHookProc, которая ничего не возвращает, но принимает в качестве параметров два значения типа bool и hInstance. В следующей строке объявляется переменная RunStopHook описанного типа, и ей присваивается значение 0.
| Примечание |
| Исходный код примера , описанного в этом разделе, вы можете найти на компакт - диске в каталоге \Demo\Chapter3\OpenPassTest. |
