DDE与COM技术在组态软件开发中的应用
数。
DDE实现程序间的通信是通过三个标识约定的:
应用程序名(Application):进行DDE对话双方的名称;
主题(Topic):被讨论的数据域;
项目(Item):被讨论的特定数据对象。
在DDE服务程序中首先使用DdeInitialize进行初始化,然后调用DdeCreateStringHandle建立应用程序名、主题和项目等标识的句柄,再通过DdeNameService在操作系统中注册DDE服务程序的名字。根据这些句柄,客户程序就可以使用它提供的DDE服务了。在VC++中的程序实现如下:
#include<ddeml.h>……
DWORDidInstc=0,iData;//iDate是项目对应的数据
HSZhszSvr,hszTopic,hszIrem;
DdeInitialize(&idInst,(PFNCALLBACK)DdeCallback,CBF_
FAIL_EXECUTES┃CBF_SKIP_ALLNOTIFICATIONS,0L);
//建立应用程序名、主题和项目等标识的句柄
hszSvr=DdeCreateStringHandle(idInst,“DDEApp”,0);
hszTopic=DdeCreateStringHandl
e(idInst,“DDEAppTopic”,0);
hszItem=DdeCreateStringHandle(idInst,“DDEApphem”,0);
//在操作系统中注册该DDE服务
DdeNameService(idInst,hszSvr,0L,DNS_REGISTER);
……
DDE服务程序的核心部分是一个回调函数,它处理所有DDE消息及相应数据请求。DDE服务程序回调函数的代码如下:
HDDEDATACALLBACKDdeCallback(WORDusType,WORDusFmt,HCONVhConv,HSZhsz1,HSZhsz2,HDDE—DATAhData,DWORD1Datal,DWORD1Data2){CHARsz[5]
if(usType==XTYP_CONNECT){//得到连接请求return((HDDEDATA)TRUE);
}
//校验主题、项目的句柄及数据格式
if(hszl==hszTopic&&hsz2==hszItem&&usFmt==CF_TEXT){
if(usType==XTYP_REQUEST‖usType==XTYP_ADVREQ){//得到数据请求
_itoa(iData,sz,10);/
DDE实现程序间的通信是通过三个标识约定的:
应用程序名(Application):进行DDE对话双方的名称;
主题(Topic):被讨论的数据域;
项目(Item):被讨论的特定数据对象。
在DDE服务程序中首先使用DdeInitialize进行初始化,然后调用DdeCreateStringHandle建立应用程序名、主题和项目等标识的句柄,再通过DdeNameService在操作系统中注册DDE服务程序的名字。根据这些句柄,客户程序就可以使用它提供的DDE服务了。在VC++中的程序实现如下:
#include<ddeml.h>……
DWORDidInstc=0,iData;//iDate是项目对应的数据
HSZhszSvr,hszTopic,hszIrem;
DdeInitialize(&idInst,(PFNCALLBACK)DdeCallback,CBF_
FAIL_EXECUTES┃CBF_SKIP_ALLNOTIFICATIONS,0L);
//建立应用程序名、主题和项目等标识的句柄
hszSvr=DdeCreateStringHandle(idInst,“DDEApp”,0);
hszTopic=DdeCreateStringHandl
e(idInst,“DDEAppTopic”,0);
hszItem=DdeCreateStringHandle(idInst,“DDEApphem”,0);
//在操作系统中注册该DDE服务
DdeNameService(idInst,hszSvr,0L,DNS_REGISTER);
……
DDE服务程序的核心部分是一个回调函数,它处理所有DDE消息及相应数据请求。DDE服务程序回调函数的代码如下:
HDDEDATACALLBACKDdeCallback(WORDusType,WORDusFmt,HCONVhConv,HSZhsz1,HSZhsz2,HDDE—DATAhData,DWORD1Datal,DWORD1Data2){CHARsz[5]
if(usType==XTYP_CONNECT){//得到连接请求return((HDDEDATA)TRUE);
}
//校验主题、项目的句柄及数据格式
if(hszl==hszTopic&&hsz2==hszItem&&usFmt==CF_TEXT){
if(usType==XTYP_REQUEST‖usType==XTYP_ADVREQ){//得到数据请求
_itoa(iData,sz,10);/
- 上一篇论文: MAP-CA宽带数字信号处理器的原理及其应用
- 下一篇论文: 自动洗碗机的控制系统设计