今天是
设为首页 | 联系站长 | 加入收藏
首页 | 新闻资讯 | 高考招生 | 考研招生 | 艺术招生 | 就业信息 | 教师招聘 | 招生信息 | 培训招生 | 民办招生
校庆 | 成人教育 | 远程教育 | 网络学院 | 软件学院 | 高职高专 | 独立学院 | 中外合作 | 自学考试 | 热点关注 
校园 | 高等教育 | 职业教育 | 民办教育 | 基础教育 | 教育论文 | 资格考试 | 出国留学 | 高校风采  | 高校名师 
北京 天津 河北 湖南 山西 辽宁 吉林 福建 上海 浙江 江西 广东 重庆 四川 云南 贵州 广西 海南 江苏 安徽 山东 内蒙 湖北 河南 陕西 甘肃 宁夏 青海 黑龙江
您当前的位置:中国高校资讯网 -> 高等教育 -> 教师论文 -> 文章内容
中文全文信息检索系统中索引项技术及分词系统的实现
作者:佚名  来源:转载  发布时间:2007-6-25 15:33:26  发布人:admin

减小字体   增大字体  

摘 要 该文提出了一种在Windows3.1保护模式下,通过动态连接库(DLL)生成中断服务程序代码,实现外设与Windows应用程序实时通信的有效方法

一、前 言
计算机的日益普及和计算机技术日益成熟,使得计算机在工业控制监测中的应用渐渐深入。但工业应用不同于其它方面,它要求有较强的实时性。现在有很多的DOS软件在运行过程中通过挂接外部中断方式实现DOS应用软件与外设的实时通信,这种方法实现起来十分简单。而在Windows中应用程序能否也能够利用外部硬中断实现外设与Windows应用程序的实时通信呢?答案是肯定的。这里的关键是要解决好中断代码与Windows应用程序相互之间交换信息的问题
从外设发送异步的硬中断,通过中断处理程序传递一条信息给Windows应用程序。这时可以初始化相关端口,准备好数据,然后进行数据传送,从而做到实时通信。
实现Windows应用程序响应外部中断的方法有很多,如Microsoft公司自己开发的SDK、DDK软件包,使用嵌入式汇编等等。本文将介绍一种在BC++3.1的基础上利用Windows 3.1拥有的一些功能实现Windows实时通信的实例。

二、中断代码的位置
Windows中,几乎所有的异步事件都是由中断处理程序来管理的。中断处理程序包含在设备驱动程序中,由Windows在环境初始化中安装。例如,KEYBOARD.DRV、MOUSE.DRV和COMM.DRV均含有中断处理程序,以处理相应的键盘、鼠标和串行口的异步中断。可以仿照标准设备驱动程序,编写中断处理代码,以响应外设的通信请求,从而完成一次实时通信。
中断代码既可以包含在应用程序的可执行代码中,也可以包含在动态连接库(DLL)中。包含在应用程序中的代码只能在一个程序中使用,而在动态连接库中的代码则可以在Windows系统中所有的应用程序所共享。这样不仅在整个Windows系统中只有一个中断代码的副本,提高了内存的使用效率,更重要的是可以防止由于同时存在多个中断代码的副本而发生冲突。本文将在DLL中编制中断处理程序。
当动态连接库被装入时,要调用DLL库的入口点LibMain(),利用这一点可以执行一些初始化工作,可以分配一些内存块,可以初始化一些全局变量或者静态变量,可以安装中断服务程序的代码等等。例如:
void interrupt (oldIsr)(--CPPARGS)
/* 旧的中断服务程序地址 */
LibMain(HANDLE hInstance,WORD wDataSeg,WORD cbHeapSize,L
PSTR
lpszCmdLine)
{

oldIsr=getvect(IRQNum);
/* IRQNum指中断号 */
setvect(IRQNum,newIsr);
/* newIsr指新中断服务程序代码 */
return(1);
}
函数setvect()既可在实模式下,也可在保护模式下设置中断处理向量。
上述代码也可以放在一个由用户设置的引出(export)函数中,在应用程序中用户可以调用此引出函数来安装中断服务程序代码。
由于中断可以在任何时刻发生,中断代码必须驻留在内存中,并且在应用程序运行的过程中一直处于某一固定内存中。这一点无论是在实模式还是在保护模式下都是一致的。
在DLL的模块定义文件中应注意:

1.CODE语句为固定代码段,即FIXED;

2.EXPORTS语句要引出被应用程序和其它DLL用作入口点的函数。
三、通信机制
编写实时通信例程关键在于必须认识到,异步事件对应用程序的触发是异步发生的,不在Windows的消息处理机制和多任务范围内。为了使通信例程能够正确地工作,通信例程必须通知Windows有异步事件发生,且不能打断应用程序的任务管理或消息流。要作到这一点,通信例程必须通过调用PostMessage或PostAppMessage函数向应用程序的消息队列中加入一条消息。
需要注意的是,在DLL中调用PostMessage(HWND hwnd, …)时,必须先确定hwnd的实际值,可以通过使用引出函数的办法来实现,如下所示:
static HWND hWndApp;
void FAR PASCAL SetIsrWin(HWND hwnd)
{
hWndApp=hwnd;
}

然后在应用程序的窗口函数中,对WM-CREATE消息进行处理时调用此函数来初始化DLL中的静态变量hWndApp:
CASE WM-CREATE:

SetIsrWin(hwnd); /* hwnd指应用程序窗口句柄 */
定义一个在应用程序中使用的消息:
#define ISRM-RUPT WM-USER+255最后在DLL中的中断服务程序代码中,调用PostMessage即可完成Windows应用程序和中断服务程序代码相互的信息交流:
void interrupt newIsr(--CPPARGS)
{

PostMessage(hWndApp,WM-RUPT,wParam,lParam);

}

四、程序实例
本示例先安装在DLL中的外中断服务代码,通过386/AT总线上的中断申请线(IRQ12)外触发,由中断服务代码发送一条消息WM-RUPT通知Windows应用程序外设有实时通信请求,应用程序收到这条消息后,在窗口用户区显示一条信息,表明已和外设联络上,并同时鸣叫一声喇叭。
程序分为两部分:DLL库代码和Windows应用程序代码。

1.DLL库代码
/*----------*
* interrupt include file,named handle.h*
*----------*/
void FAR PASCAL SetIsrWin(HWND hwnd);
void FAR PASCAL SetIRQNum(unsigned char IRQ);
/*----------*
* module defination file, named handle.def *
*----------*/
LIBRARY HANDLE
EXETYPES WINDOWS
STUB 'WINSTUB.EXE'
CODE PRELOAD FIXED
DATA PRELOAD SINGLE
HEAPSIZE 1024
EXPORTS
WEP
@1 RESIDENTNAME
SetIRQNum @3
/*----------*
* interrupt service program in dll,named handle.dll *

[] [返回上一页] [打 印] [收 藏]
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论…]
 
美丽的中山大学 江苏大学 山东铝业职业学院 潮州学院
栏目导航
· 高等教育巡礼 · 名校长访谈
· 教师论文 · 教师书架
· 高教法规
热门文章
· 河南高考报名政策出台 符合..
· 2007年美术高考招生简章总..
· 第一届高等学校教学名师奖..
· 2007年美术高考招生简章总..
· 2006年北京自考英语不再承..
· 世界第一17岁上海女孩新托..
· 2007年全国各院校艺术类专..
· 各省注册会计师协会注册部..
· 记录年轻人真实的心路历程..
· 2007年具有高等学历教育招..
相关文章
· 两港校2011年内地扩招 香港..
· 本科录取率不及理科一半 高..
· 代表委员热议高考制度 不赞..
· 湖南今秋高中文理不分科 部..
· 香港中文大学录取16名内地..
· 湖南率先取消高中文理分科..
· 生源充足校舍吃紧 荷兰中..
· 第八届“汉语桥”世界大学..
· 香港中文大学教授:国内大学..
· 香港中文大学08年内地招生..
诚聘英才 - 广告服务 - 付款方式 - 网站声明 - 联系方式 - 中华人民共和国信息产业部网站备案号:京ICP备06064914号
服务热线电话: 86-10-87839609  mailto:webmaster@gxedu.org.cn 网络实名:中国高校资讯网
 Copyright © 2000-2010 Gxedu.org.cn Inc.All rights reserved.通用网址:中国高校资讯网
北京网通提供宽带支持   本站信息未经授权不得复制或建立本站镜像