科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件VC下动态数据交换技术之永久数据链路

VC下动态数据交换技术之永久数据链路

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文对动态数据交换技术中的永久数据链路的建立和撤消处理方法作了较为详细的介绍,并给出了具体实现代码。

作者:青岛郎锐 来源:天极网 2007年10月19日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
永久数据链路的撤消

  永久链路的撤消也是由客户发出,通过向服务器窗口发出WM_DDE_UNADVISE消息通知服务器。服务器首先检查当前对话中是否有与特定项目相对应的链路。如果存在就返回一个WM_DDE_ACK的肯定应答,否则返回否定应答(具体流程参见图1)。对于此永久链路的撤消,首先由客户发出WM_DDE_UNADVISE消息:

ATOM atomItem = GlobalAddAtom("Item C"); // 得到数据项原子标识值
HWND hwndClient = GetSafeHwnd(); // 获取当前窗口的安全句柄
::PostMessage(m_hwndServer, WM_DDE_UNADVISE, (WPARAM)hwndClient, (LPARAM)MAKELONG(0, atomItem)); // 向服务器发送WM_DDE_ADVISE消息
GlobalDeleteAtom(atomItem); // 删除原子

  服务器窗口在收到此消息后,首先检查在当前对话中是否有与特定项目相对应的链路,如果存在,在撤消此链路的同时向客户返回肯定的WM_DDE_ACK应答;如果请求撤消的链路已经不存在了,则返回否定应答:

AfxMessageBox("客户请求撤消此永久链路!"); // 反馈信息
// 锁定内存
SERVERADVISE* lpServerAdvise = (SERVERADVISE*)GlobalLock(m_hServerAdvise);
lpServerAdvise->fAdvise = FALSE; // 撤消数据项连接
GlobalUnlock(m_hServerAdvise); // 解锁内存
if (m_bHaveALink == TRUE)
{
 // 返回应答
 LONG lDataPack = PackDDElParam(WM_DDE_ACK, (UINT)0x8000, HIWORD(lParam)); // 组合消息参数lParam
 ::PostMessage((HWND)wParam, WM_DDE_ACK, (WPARAM)m_hwndServer, (LPARAM)lDataPack); // 向客户发送肯定应答
}
else
{
 // 组合消息参数lParam
 LONG lDataPack = PackDDElParam(WM_DDE_ACK, (UINT)0, HIWORD(lParam));
 ::PostMessage((HWND)wParam, WM_DDE_ACK, (WPARAM)m_hwndServer, (LPARAM)lDataPack); // 向客户发送肯定应答
}

  小结

  本文对动态数据交换技术中的永久数据链路的建立和撤消处理方法作了较为详细的介绍,并给出了具体实现代码。通过本文读者可以掌握温数据链路和热数据链路两种永久数据链路的创建和撤消方法。本文所述代码在Windows 2000 Professional下由Microsoft Visual C++ 6.0编译通过。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章