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


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


// Копируем текущий каталог, путь к запускаемой // программе и ее параметры _fmemcpy((LPVOID)szCmd[nCmdLine], (LPVOID)szCallbackBuf, 65 + 256);

// Посылаем сообщение приложению dos2win PostMessage(hwndDos2Win, WM_STARTWINAPP, 0, (LPARAM)szCmd[nCmdLine]);

// Очередь запросов организована в виде кольца nCmdLine++; if(nCmdLine > 5) nCmdLine = 0; }

// ======================================================== // Функция RegisterWnd // Регистрация окна приложения dos2win.exe // ======================================================== extern "C" void FAR PASCAL _export RegisterWnd(HWND hwnd) { if(vxdApi == NULL) return;

// Сохраняем идентификатор окна hwndDos2Win = hwnd; if(vxdApi == NULL) return;

// Вычисляем компоненты адреса функции обратного вызова unsigned sel = SELECTOROF((LPVOID)WinAppStart); unsigned off = OFFSETOF((LPVOID)WinAppStart);

// Вычисляем компоненты адреса буфера szCallbackBuf unsigned bsel = SELECTOROF(szCallbackBuf); unsigned boff = OFFSETOF(szCallbackBuf);

// Регистрируем функцию обратного вызова и // буфер szCallbackBuf в VxD-драйвере asm mov dx, sel asm mov cx, off asm mov si, bsel asm mov di, boff asm mov ax, vxdapiRegisterWnd (*vxdApi)(); }

// ======================================================== // Функция UnregisterWnd // Отключение VxD-драйвера // ======================================================== void UnregisterWnd(VXDAPI vxdEntry) { if(vxdApi == NULL) return;

asm mov ax, vxdapiUnregisterWnd (*vxdEntry)(); }

// ======================================================== // Функция vxdGetDeviceAPI // Получение адреса точки входа API для // VxD-драйвера, идентификатор которого // задан параметром vxd_id // ======================================================== VXDAPI vxdGetDeviceAPI(unsigned short vxd_id) { unsigned axreg, dxreg;

asm push di asm push es asm mov ax, 0x1684 asm mov bx, vxd_id asm xor di, di asm mov es, di asm int 0x2f asm mov ax, di asm mov dx, es asm pop es asm pop di

asm mov axreg, ax asm mov dxreg, dx




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



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