Въведение
В Windows, OS / 2 и други операционни системи (с инструменти за разработка на трети страни), динамичният обмен на данни (DDE) позволява споделяне на данни или комуникация между програмата. Например, когато промените таблица във вашата програма за база данни или когато елементът с данни в електронния раздел е, таблицата или елементът с данни също трябва да направи съответната промяна в другия софтуер, който можете да използвате. DDE е междупроцесна комуникация със споделена памет като публична превключваща област и предоставя на приложението протокол или набор от команди и формат на съобщение. DDE използва модела клиент/сървър, при който приложението обработва данните на клиента, докато приложението предоставя данни на сървъра.
Принцип на работа
Принципът на работа на DDE е:
Две едновременно работещи програми се обменят в режим DDE при превключване на данни, след като клиентът и сървърът установят връзка за връзка, тогава клиентът ще бъде уведомен веднага след промяната на данните в сървъра. Каналът за връзка за данни, установен от режима DDE, е двупосочен, т.е. клиентът може не само да чете данните в сървъра, но и да ги променя.
DDE и клипбордът поддържат както стандартни формати на данни (като текст, матрица и др.), но също така поддържат персонализирани формати на данни. Въпреки това, техните механизми за прехвърляне на данни са различни и ясна разлика е, че операцията на клипборда почти винаги се използва като отговор за еднократна употреба на определена от потребителя операция, като например избиране на команди за поставяне от менюто. Въпреки че DDE може да бъде стартиран от потребителя, той продължава да се възпроизвежда, обикновено не се налага допълнителна намеса.
, например:
Страна A прилага глобална памет, след което поставя показалеца на паметта PostMessage към страна B, Страна B е достъпна за достъп до глобалната памет според получения указател. Има няколко API функции за това и вие проверявате функцията на DDE head в MSDN. Тъй като технологията е елиминирана, дори MFC не го пакетира. Трудно е да се гарантира, че ще се появи и в бъдещия Windows API.
Съдържание
DDE диалогът се разглежда от три идентификатора.
1, името на приложението: Името на двете страни на диалоговия прозорец DDE. Името на търговското приложение е дадено в документацията на продукта. Името на програмата "Конфигуриране на King" работеща система е "изглед"; Името на приложението на Microsoft Excel е "Excel"; Програмата на Visual Basic използва името на изпълнимия файл.
2, тема: Обсъжда се домейн. За "Configuration King", обектът е посочен като "tagname"; Името на темата на Excel е името на електронната таблица, като Sheetl, Sheet2, ...; Програма Visual Basic, темата на програмата Visual Basic се определя от формата на стойността на свойството LINKTOPIC. .
3, т.: Това е конкретен обсъден обект с данни. В речника на данните на "Configuring King" инженерите дефинират входно-изходните променливи, като същевременно определят името на проекта. Елементът в Excel е единица, като RLC2 (RLC2 представлява първия ред, втората колона единица). За програмата Visual Basic проектът е специфично текстово поле, името на етикета или поле за картина.
Метод на обмен
(1) Студена връзка (COOLLINK): Обменът на данни е еднократно предаване на данни, същото като клипборда. Когато данните в сървъра се променят, клиентът може да чете и записва данни от сървъра по всяко време;
(2) WarmLink: Когато данните в сървъра се променят, той ще уведоми клиента веднага след промяната на данните. Когато клиентът бъде уведомен, данните се извличат;
(3) Гореща връзка: Когато данните в сървъра се променят, той незабавно ще уведоми клиента, докато променените данни се изпращат директно на клиента.
DDE клиент изисква данни към програмата на DDE сървъра, той първо трябва да знае името на сървъра (т.е. име на DDService), име на DDE тема (име на теми) и да знае кое име на проект изисква кой елемент от данни (име на елементи). Името на DDService трябва да има уникалност, в противен случай е лесно да се направи объркване. Обикновено DDService е името на програмата на сървъра, но не е абсолютно, то се задава от дизайнера на програмата в програмата, а не чрез промяна на името на програмата. Името на темите и името на елементите също се задават от DDeService, а името на услугата на всички сървъри се регистрира в системата. Когато клиент поиска данни към сървър, клиентът трябва да съобщи името на услугата на сървъра и името на темите. Само когато името на услугата, името на темите е в съответствие с имената, зададени от сървъра, системата комуникира заявката на клиента към сървъра.
Когато името на услугата е в съответствие с името на Темите, сървърът незабавно определя дали името на Елементите е законно. Ако заявеното име на артикул е правният елемент с данни в сървъра, сървърът е установен и сървърът ще уведоми клиента навреме след установяването на данните. Един сървър може да има множество имена на теми, като броят на имената на елементите не е ограничен.
DDE обменът може да възникне между приложения на различни компютри в една или мрежа. Разработчиците могат също така да дефинират персонализирани DDE формати на данни и IPC със специално предназначение между приложенията, които имат по-тясно свързани комуникационни изисквания. Повечето базирани на Windows приложения поддържат DDE. Въпреки това, DDE има значителен недостатък, че ефективността на комуникацията е ниска и когато трафикът е голям, опресняването на данните е бавно и DDE е по-практичен, когато данните са по-малко.
Програма за писане
За удобство на използване Microsoft предоставя библиотеката за управление на DDE (DDEML). DDEML е специализиран в координирането на DDE комуникацията, предоставянето на DDE приложения с манипулационни низове и услуги за обмен на данни, елиминирайки проблемите, причинени от Upper DDE протоколите.
Приложенията, разработени с помощта на DDEML (клиент / сървър), са по-добри от DDEML приложенията по отношение на оперативна последователност или по отношение на програмиране. Освен това DDEML приложенията улесняват разработването на DDE приложения, тъй като DDEML (това е DLL) работи в работата на офиса на офиса. След използване на DDEML повечето сесии между клиенти и сървъри не се достигат директно, а чрез DDEML, тоест чрез използване на функцията за обратно извикване за обработка на DDE транзакции, а ранните съобщения са директно.
Преди да извика други DDEML функции, клиентът/сървърът трябва да извика функцията DDeinitialize (), за да получи идентификатора на екземпляра, да регистрира функцията DDECALLBACK и да посочи филтрирането на транзакция за функцията за обратно извикване. За сървъра, след като използвате DDeinitialize (), извикайте DDecreateStringHandle (), за да създадете манипулатор на името на услугата, името на темите и името на елементите и след това регистрирайте сървъра в операционната система чрез DDENAMESERVICE (). Въз основа на тези дръжки, клиентите могат да използват DDE услугата, която предоставя.
За да изпълнят DDE задача, много DDEML функции изискват достъп до низове. Например: клиентът трябва да посочи името на услугата и името на темите, когато извиква функцията DDEConnect (), за да поиска сесия със сървъра. Можете да получите конкретен манипулатор на низ, като извикате функцията DDecreateStringHandle (). Например:
HSZHSZSERVNAME = DDECREATESTRINGHANDLE (iDinst, "myserver", cp_winansi);
hszroszsystopic = ddecreateStringHandle (iDinst, szddesys_topic, cp_winansi);
приложение Функцията за обратно извикване на DDE получава множество манипулатори на низове в повечето DDE транзакции. Например: По време на обработката на транзакция XTYP_REQUEST, DDE сървър получава две манипулатори на низове: низ на име на идентификатор на теми, низ на име на друг идентификатор на елементи. Можете да получите дължината на символния низ, съответстваща на манипулатора на низа, като извикате функцията DdeQueryString () и репликирате низа в дефинирания от приложението буфер. Например:
двердидинст;
dwordcb;
HSZHSZSERV;
pstrpszservname;
cb = DDEQUERYSTRING (iDinst, HSZSERV, (LPSTR) NULL, 0, CP_WINANSI) +1;
pszservname = (pstr) Localalloc (LPTR, (UINT) CB);
DdeQueryString (iDinst, HSZSERV, PSZSERVNAME, CB, CP_WINANSI;
Според Microsoft MSDN съществуващото DDE-базирано приложение за съобщения е съвместимо с DDEML приложения, т.е. DDE-базираните приложения могат да бъдат диалог и транзакции на DDEML приложение. Когато използвате DDEML, трябва да включите заглавните файлове DDEML.h във файла източник, да свържете файла user32.lib и да осигурите правилния системен път на файла DDEML.dll.