您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:70 来源:vckbase.com

本文章共5436字,分4页,当前第1页,快速翻页:
 

用 ATL ActiveX 绘制任意平面函数的曲线

作者:杨老师

下载源代码
逆风编程精品

关键词
:脚本、ATL、ActiveX、脚本引擎、表达式计算、IActiveScript、IActiveScriptSite

一、前言
  这是非常有挑战性的题目。对于用户输入的任意一个平面函数f(x),绘制出其函数曲线。这里最关键的技术难点就是如何实现计算表达式的值。在《编译原理》和《数据结构》的书中,都有对表达式运算方法的论述。说实在的,在编译型计算机语言中实现对用户输入表达式的运算是非常困难的。需要对表达式进行扫描,去括号,按照运算符的优先级生成2叉树,然后遍历该树生成逆波兰表达式,再然后通过栈的方法进行运算。如果在表达式中再包含有函数的话......描述起来都麻烦,更不要说用程序实现了:-(
  编译型语言不容易实现,那么解释性语言又如何那?有的解释性语言是可以的,但需要一些实现的技巧,而大多数解释性语言光依靠自身功能还是不能完成的。80年代末期,我在 AppleII 的 BASIC 上使用预留程序空间的方式实现了这个功能,能想到这个解决方案,当时还自我陶醉了好多天那 :-)
  最好的,效率最高的解决方案当然是《编译原理》里所描述的方法,但是实现起来的确有一定的难度。上中学的时候,首次接触到计算机和计算机语言,我就立下了“雄心壮志”,将来一定发明一个自己的计算机语言。上大学的时候,我咨询《编译原理》课老师,“学习完成后,能否自己发明计算机语言?”我得到了老师肯定的回答----“别做梦了!”:-( 毕业工作后,我也成为了一名计算机老师,一个偶然的任务,让我重新萌发了我不死的“贼心”。由于实验室的 Z-80 单板机数量有限,试验台又太占地方,结果学生需要5,6个人分一组一起做实验,教学效果太差。于是领导分配给我一个任务:在PC机上作一个Z-80的仿真环境,也就是在PC机上实现一个Z-80的交叉汇编和 DEUBG 调试环境。还好,由于在汇编级别上进行仿真,并不困难,只要经过比较简单的语法分析和词法分析,然后查表给出汇编的二进制机器码,任务就完成了。在此次任务的过程中,积累了一些语法、词法分析的经验,于是,我开始了真正创造计算机语言的工作,并最终完成。语言虽然发明了,功能非常有限,但我主要的“贼心”已然实现,也就没有什么兴趣继续完善它了......不久前,看到 VCKBASE 上一个即将毕业的学生发表的文章和代码,实现了C的编译器。虽然还比较简陋,但比起我们当年,现在的学生水平(至少这个学生)另我刮目相看。
  好了,言归正传,看看今天这个题目的实现方法吧。既然用表达式分析实现起来非常困难,那么换个思路,用我们的C 编译型语言动态地构造出计算表达式的脚本,然后执行脚本,让脚本引擎帮我们去计算就是了。我用ATL写了个ActiveX的控件,下图就是事例程序在“控件测试容器”中的表现。你也可以在其 它环境下去使用它,比如在HTML中。


图一 控件测试容器中运行的函数曲线绘制控件

二、如何执行脚本
  脚本的应用很广泛。HTML中可以嵌入脚本;Internet服务器也可以执行脚本(ASP,JSP...);MS Office提供了功能非常丰富的脚本语言VBA;现在流行的安装程序也使用脚本;XML的解析也可以使用脚本;还有Shell的批处理......在我们的程序中如何实现脚本的调用功能呢?

<2.1> 建立执行脚本的主机
  为了能够执行脚本,你的程序必须要建立并完成IActiveScriptSite 的接口对象。这个接口有8个方法:

HRESULT GetLCID(LCID *plcid)

  脚本引擎在准备执行脚本程序的时候,它首先要调用这个函数来询问脚本所使用的语言环境。你可以简单的返回 E_NOTIMPL,那么引擎就会使用当前系统默认使用的语言。
 

本文章更多内容1 - 2 - 3 - 4 - 下一页>>
相关文章

软件框架的利器、TangramMini组件应用教程四
如何让一个打开的文档成为活动文档
消息值,托管字符串,扰乱代码及其它
修改一个完全颜色的CListCtrl类
编程之道
更新MFC中的视图,跟踪.NET Framework中的事
常用编码详解
在List Control中实现列表项目的上下移动
深入浅出ShellExecute
软件框架的利器、TangramMini组件应用教程一
文件系统识别器
控件如何传递自定义struct
完美实现真彩自绘菜单
VC 6.0 中如何使用 CRT 调试功能来检测内
软件开发专业相关的英文简历及其资源
定制调试诊断工具和实用程序——摆脱DLL“地
发掘 C# 特性赋予科学计算项目以威力
《系统飞狐》中获取系统信息的方法
使用 Http 在线自动升级程序
UTF-8与GB2312之间的互换

相关评论


本文章所属分类:首页 VC++

  热门关键字: