DDE与COM技术在组态软件开发中的应用
> 项目(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);//将数据转换为文本格式
returnDdeCreateDataHandle(idInst,(LPBYTE)sz,
strlen(s2)十1,0L,hszItem,CP_TEXT,0);
}
if(usType==XTYP_POKE){//得到客户端发送来的数据
DdeGetData(hData,(LPBYTE)sz,strlen(sz)十1, 《DDE与COM技术在组态软件开发中的应用(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/174464.html
在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);//将数据转换为文本格式
returnDdeCreateDataHandle(idInst,(LPBYTE)sz,
strlen(s2)十1,0L,hszItem,CP_TEXT,0);
}
if(usType==XTYP_POKE){//得到客户端发送来的数据
DdeGetData(hData,(LPBYTE)sz,strlen(sz)十1, 《DDE与COM技术在组态软件开发中的应用(第2页)》