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


Листинг 3.2. Файл ddeml/ddemlfn.cpp


// ----------------------------------------------------- // Функции для работы с библиотекой DDEML // Сервер DDEML // ----------------------------------------------------- #define STRICT #include <windows.h> #include <windowsx.h> #include <ddeml.h> #include <dde.h> #include <mem.h> #include <string.h> #pragma hdrstop

#include "ddemlsr.hpp"

HDDEDATA EXPENTRY _export DDEServerCallback(WORD wType, WORD wFmt, HCONV hConv, HSZ hsz1, HSZ hsz2, HDDEDATA hData, DWORD dwData1, DWORD dwData2 );

// Идентификатор приложения, полученный после регистрации в // библиотеке DDEML DWORD idInst = 0L;

FARPROC lpDdeProc; HSZ hszService = NULL; HSZ hszTopic = NULL; HSZ hszItem = NULL;

// Идентификатор канала HCONV hConvApp = NULL;

// Буфер для приема данных char szDDEData[200];

// Версия сервера. Эта текстовая строка // передается клиенту по его запросу char szDDEServerVersion[] = "DDEML Server v.1.0, (C) Frolov A.V.";

//----------------------------------------------------- // Функция DDEServerOpen // Инициализация библиотеки DDEML //----------------------------------------------------- BOOL DDEServerOpen(HINSTANCE hInst, LPSTR szService, LPSTR szTopic, LPSTR szItem) { int rc;

// Создаем переходник для функции обратного вызова lpDdeProc = MakeProcInstance((FARPROC)DDEServerCallback, hInst);

// Выполняем инициализацию if(DdeInitialize((LPDWORD)&idInst, (PFNCALLBACK)lpDdeProc, APPCLASS_STANDARD, 0L)) { return FALSE; }

// После успешной инициализации получаем идентификаторы // строк для сервиса, раздела и элемента данных else { hszService = DdeCreateStringHandle(idInst, szService, CP_WINANSI); hszTopic = DdeCreateStringHandle(idInst, szTopic, CP_WINANSI); hszItem = DdeCreateStringHandle(idInst, szItem, CP_WINANSI);

// Регистрируем сервис DdeNameService(idInst, hszService, (HSZ)NULL, DNS_REGISTER); return TRUE; } }

//----------------------------------------------------- // Функция DDEServerClose // Завершение работы с DDEML //----------------------------------------------------- void DDEServerClose(void) { // Завершение работы канала связи if(hConvApp != NULL) { DdeDisconnect(hConvApp); hConvApp = NULL; }




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



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