快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

如何使用.net操作ddeml?

dde是为了实现进程间动态的数据交换,适合于两个程序之间的数据交换频率较大的情况,也就是交换实时数据。ddeml类库已经实现了对dde的包装,并且操作起来很方便。本人使用的便是ddeml库。

我的任务是使用dde来将实时数据发送的excel,首先创建一个dde服务器(如:serv1),注册几个主题(如: topic1)。然后打开excel,选择一个cell单元,往里面输入=serv1|topic1!\\\'aaaaa\\\',dde服务器就会进行响应,根据主题和item读取一个及时数据,返回到当前的单元格。这样一来,我就可以定制一张excel表格,里面放上我想要的数据,这些数据始终是最新的。

实现的步骤如下

1、导入所有所需的ddeml的api函数和常量

2、初始化dde对象

3、注册一个服务,并申请几个主题(topic)字符串

4、编写回调函数中的消息处理程序

5、编写相应消息进行取值的部分

要实现这一点,需要克服几个技术问题

 1、受委托的回调函数的使用方式
 2、数据回传到excel中的格式
 3、消息处理过程
 
首先讲述问题3,
 当用户往excel敲进公式时,ddeserver就会有响应,它会记下用户公式的各部分。
 然后去查找实时信息,返回一个值,这个值就是要添入到当前cell中的值。
 取到值后,调用ddeml的DdePostAdvise函数,它会激发回调函数的XTYP_ADVREQ消息
 该消息中调用DdeCreateDataHandle函数,把这个新的值放回对应的cell中。
 
 注重:DdePostAdvise的调用并不一定立刻触发XTYP_ADVREQ消息,该函数内部使用PostMessage,
 而不是sendMessage,系统会收集一些XTYP_ADVREQ消息一并处理,这时你就要区分那个cell对应那个值了。这个问题不难解决,你自己想办法吧。
 
讲述问题1,
 dde初始化需要调用一个接受委托的回调函数
     Public Declare Function DdeInitialize Lib \"user32\" Alias \"DdeInitializeA\" (ByRef pidInst As Integer, ByVal pfnCallback As DDECallBackDelegate, ByVal afCmd As Integer, ByVal ulRes As Integer) As Short
  只要你试过一遍,就会觉得它的调用实际上很简朴,这方面的资料也很多。要害就是回调函数声明的形式和定义的形式必须一致,否则将不能调用。
     Private _DDECallBack As DDEML.DDECallBackDelegate = Nothing
 _DDECallBack = New DDEML.DDECallBackDelegate(AddressOf DDECallBack)
        Dim ddeinst As Integer
        ddeinst = DDEML.DdeInitialize(g_lInstID, _DDECallBack, DDEML.APPCLASS_STANDARD, 0)

  dde初始化函数被调用之后,当前进程就会把dde的消息添加到消息循环中,假如收到这些消息,就会调用这个回调函数DDECallBack来处理。
 
第2个问题
 要想让cell接受你的值,随便传一个字符串它是不接受的,你要使用xltable格式传递,当然,假如你做的是dde客户端,什么格式也就无所谓了。(这时我经过大量的实验得到的,假如你有好办法,就请分享一下。)
10 00 04 00 01 00 03 00
 tdtTable, cb=4, rows=1, columns=3
 02 00 10 00
 tdtString, cb=16
 04 45 61 73 74
 cch=4, East (tdtString continued)
 04 57 65 73 74
 cch=4, West (tdtString continued)
 05 4e 6f 72 74 68
 cch=5, North (tdtString continued)

我的qq是9611153,hotmail lgs7907@hotmail.com

我的最后问题是tdtTable不能填写多个cell,以上格式是微软文档中的,实际上不行,不知道为什么。把数据写在第一个td中。






返回类别: 教程
上一教程: ADO.NET:通向未来之桥
下一教程: 走近COM Interop??RCW入门

您可以阅读与"如何使用.net操作ddeml?"相关的教程:
· asp.net中的vb7中如何使用socket作一个传送时间的server
· 如何使用.NET配置文件(一)
· 如何使用asp+ 动态创建页面元素
· .Net中如何操作IIS(源代码)
· .Net中如何操作IIS
    微笑服务 优质保证 索取样品