Операционная система Microsoft Windows 3.1 для программиста. Дополнительные главы


Листинг 5.9. Файл dos2win\d2w.cpp


// ====================================================== // DLL-библиотека d2w.dll // // Используется совместно с приложением dos2win.exe // и VxD-драйвером VXDSRV.386 версии 1.1 // ------------------------------------------------------ // Copyright (C) 1995 Alexandr Frolov // ====================================================== #define STRICT #include <windows.h> #include <mem.h> #include "d2w.h" #include "vxdcall.hpp"

extern "C" void FAR PASCAL _export WinAppStart(WORD wVxDVersion);

extern "C" void FAR PASCAL _export RegisterWnd(HWND hwnd);

void UnregisterWnd(VXDAPI vxdEntry);

// Точка входа API VxD-драйвера VXDAPI vxdApi = NULL;

// Идентификатор окна приложения dos2win.exe HWND hwndDos2Win;

// В этот буфер VXD-драйвер VXDSRV.386 будет записывать // текущий диск, текущий каталог, путь к запускаемой // программе и параметры, использованные виртуальной // машиной MS-DOS в процессе запуска программы BYTE szCallbackBuf[350];

// Очередь запросов на запуск программ из VM MS-DOS // Организована в виде массива BYTE szCmd[6][350];

// Номер строки параметров в массиве szCmd int nCmdLine = 0;

// ======================================================== // Функция LibMain // Получает управление только один раз при // загрузке DLL-библиотеки в память // ======================================================== #pragma argsused int FAR PASCAL LibMain(HINSTANCE hModule, WORD wDataSegment, WORD wHeapSize, LPSTR lpszCmdLine) { if(wHeapSize != 0) UnlockData(0);

// Получаем точку входа API VxD-драйвера vxdApi = vxdGetDeviceAPI(VXD_ID);

return TRUE; }

// ======================================================== // Функция WEP // ======================================================== #pragma argsused int FAR PASCAL WEP(int bSystemExit) { // Если DLL-библиотека выгружается из памяти, // выполняем отключение VxD-драйвера if(vxdApi != NULL) UnregisterWnd(vxdApi); return 1; }

// ======================================================== // Функция обратного вызова WinAppStart // Вызывается из VxD-драйвера VXDSRV.386 // Копирует строку, содержащую все характеристики // запускаемой программы в очередь запросов, затем // посылает сообщение WM_STARTWINAPP в приложение // dos2win.exe, которое выполняет запуск. // ======================================================== extern "C" void FAR PASCAL _export WinAppStart(WORD wVxDVersion) { // Проверяем версию VxD-драйвера, передаваемую // через параметр wVxDVersion if(wVxDVersion != 0x0101) return;




Начало  Назад  Вперед



Книжный магазин