如何使用.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
补充:asp.net教程,基础入门