| 域名空间 下载中心 社区论坛 信息公告 MY小屋 |
![]() |
联系我们 设为首页 加入收藏 |
|
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿 论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图 专题 | 应用软件 | 聊天通讯 | Q Q 专栏 | 建站经验 | 在线工具 | 站长Club | 注 册 表 | 旧版 社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务 |
| 新版上线![旧版] | |||||
注:打开慢时请稍等
创建ISAPI扩展http://www.iyit.net 日期:2006-5-23 12:28:26 来源:网络转载 点击: |
WEB链接 在创建自己的ISAPI扩展或过滤器时,最好的资源就是其它程序员编写的免费软件。alt.comp.freeware新闻组中列出了相当多的这样的软件。例如,在写本书的时候,AAIT Incorporated就推出了一个新的免费软件,称为CGI Expert(CGI专家)。它同时支持CGI、Win-CGI、ISAPI以及NSAPI接口。显然谁都想用免费产品,但是就像使用其它产品一样,一定要小心。不过它们确实对如何创建自己的定制扩展提供了极好的想法(或者可以提供一种解决方案使得你自己不必去编程了)。 1. 使用File(文件)|New(新建)命令显示如下图所示的New(新建)对话框。请注意,我已经选择了ISAPI Extension Wizard(ISAPI 扩展向导)。 2. 在工程名称域中键入想创建的ISA的名字。这个例子中使用的是DispStr,不过可以使用你想使用的任何名称。 3. 单击OK,就会看到如下图所示的ISAPI Extension Wizard(ISAPI扩展向导)Step 1 of 1(第一步)对话框。在这里可以为你的ISA选择各种特性。注意对话框中有三个主要区域。选中第一个复选框,就可以创建过滤器;选中第二个复选框,就可以创建扩展。第三个区域定义如何将MFC与你的应用程序链接起来。 4. 选中扩展选项,而不是过滤器选项。在Extension Description (扩展描述)域中,你应对你的ISA提供简短扼要的说明。该说明将以一个字符串的形式出现,你可在DLL中需要时使用它。当某人打开你的ISA的Properties(属性)对话框时,该说明并不出现在对话框中,所以需要给DLL的版本信息再添加点附加文本。 5. 在Extension Description(扩展描述)域输入Display a string from the client(显示来自客户机的串)。 6. 单击Finish(完成)就会看到如下图所示的New Project Information (新建工程信息)对话框。 7. 单击OK,ISAPI Extension Wizard(ISAPI 扩展向导)就完成了所需的程序框架的创建。 现在,为了使扩展具有实用功能,还要对ISAPI Extension Wizard(ISAPI 扩展向导)创建的框架做三件事。首先是为添加的新函数创建一个分析映射 ( Parsemap) 。在DispStr.cpp文件的顶部可以找到该分析映射。程序列表13.1 列出了应该给该分析映射加入的代码,以便我们能够从HTML页面访问这个新增函数。 尽管只需要增加两行代码就能使这个例子工作,但我们真正关心的却是下面三行代码。ON_PARSE_COMMAND()宏允许定义一个新函数。注意,应提供函数名、所提供函数所在的类以及该函数使用的参数的类型。ON_PARSE_COMMAND()宏需要一个参数项,尽管你实际上可能并不需要任何参数就能使该函数正常运行。注意,因为缺省函数不需要任何参数,所以使用了ITS_EMPTY值。由于我们的新函数,DispStr棗需要一个字符串指针,所以它带有一个参数ITS_PSTR。 然后下一行是ON_PARSE_COMMAND_PARAMS()宏。你必须告诉VisualC++如何处理你的函数的参数。例如,如果我们想强制用户为函数提供一个串值,就应在ON_PARSE_COMMAND_PARAMS()宏中,简单的放上String。因为实际上并不一定要求用户提供一个字符串才能使用函数工作,所以这里提供了一个缺省值 。注意如果你需要一个参数而用户没有提供的话,查询就会失败。最后还要用DEFAULT_PARSE_COMMAND() 宏告诉Visual C++用哪个函数作为缺省函数。由于这个例子的Default函数挺合适,所以就没有更改这个缺省的设置。 其次,你需要给DispStr.H文件增加一个函数项。除非通过修改类说明来包含你的新函数,否则Visual C++对此将会一无所知,于是DLL也不会被编译。幸运的是,我们只要增加程序列表13.2中黑体显示的那一行代码就可以了。程序列表13.2列出了该行代码周围的代码行,以便于你知道新的一行应添加在什么地方。 可以看出,增加函数调用声明很简单。不过现在你可能还不清楚声明的CHttpServerContext* pCtxt部分是从哪里来的。我们确实没有在前面的任何分析映射宏中对它进行说明。实际上 pCtxt 参数是缺省地传递给函数的。记住前面已经介绍过CHttpServer类可以为每个用户请求创建一个CHttpServerContext对象,这就是该参数的来源。你得到的是指向与用户对函数的调用相联的CHttpServerContext对象的指针。这也是对函数的多个调用进行区分的办法──每个调用都有一个完全不同的对象与之相关联。 制作这个DLL函数还剩最后一件事──给DispStr.CPP文件添加函数代码。这个例子是将函数代码放在已有的Default()函数代码之后。程序列表13.3 显示的是这个例子使用的非常短的函数。这里没有什么花里胡哨的东西,其全部目的在于说明如何完成这件任务。 这个函数本身很容易理解。我们做的第一件事是告诉Visual C++启动一个Web页,这就像给文档加入<HTML>和<HEAD> 标记一样。我们做的第二件事是输出一个标题,就像给文档加入<TITLE>标记一样。重载缺省标题的唯一途径是重载WriteTitle()函数,这是一件想干就能干成的事。现在有了标题,就该创建内容了。需要使用流操作符来发送信息。注意这个例子很轻松自如地使用了第8章介绍的所有标记。对标准HTML 文档能做的事也同样能够对ISAPI扩展做。待会儿将会说明这些标记是如何一起工作从而产生了Web页的。另外还应注意我们将从Web页得到的字符串发送回新Web页,甚至不必将值转换为文本,就可以使它们工作了。这个例子中使用的最后一个函数调用是EndContent(),它告诉Visual C++已经完成发送信息的任务了,这就象在文档末尾加上</HTML>一样。 现在你就可以编译我们创建的ISAPI扩展了。一旦编译成功,就可以将DLL移到Web 服务器上。有好几个逻辑位置可以存放该DLL,不过最常用的两个位置是Scripts目录或一个特殊的Controls目录。我通常将自己的所有控件都放在Controls目录中以便于查找,不过实际的存放位置并不重要。唯一的原则是用户应该能够通过Web站点来访问包含该DLL的目录,而且你应该用Web服务器提供的Internet服务管理器将该目录标记为可执行的。 |
| 相关文章 | ||||
| 友情链接 | ||||||
| 设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接 |
| |||||||