📄 bcjq063.txt
字号:
C++ Builder开发者:程序员之家
var how_many_ads = 3;
var now = new Date()
var sec = now.getSeconds()
var ad = sec % how_many_ads;
ad +=1;
首页
| 控件天堂 | 控件使用
| 编程技巧
| 源代码 | 编程工具 |
系统补丁 | 电子书籍 | 技术论坛
| 相关链接
if (ad==1) {document.write(''+'');}
if (ad==2) {document.write(''+'');}
if (ad==3) {document.write(''+'');}
var marqueecontents=''+scroll_text+''
if (document.all)
document.write(''+marqueecontents+'')
function regenerate(){
window.location.reload()
}
function regenerate2(){
if (document.layers){
setTimeout("window.onresize=regenerate",450)
intializemarquee()
}
}
function intializemarquee(){
document.cmarquee01.document.cmarquee02.document.write(marqueecontents)
document.cmarquee01.document.cmarquee02.document.close()
thelength=document.cmarquee01.document.cmarquee02.document.height
scrollit()
}
function scrollit(){
if (document.cmarquee01.document.cmarquee02.top>=thelength*(-1)){
document.cmarquee01.document.cmarquee02.top-=speed
setTimeout("scrollit()",100)
}
else{
document.cmarquee01.document.cmarquee02.top=marqueeheight
scrollit()
}
}
window.onload=regenerate2
当前位置
:
编程技巧
用C++Builder开发ISAPI扩展应用程序
一、ISAPI概述 Microsoft的WEB服务器提供了不同的ISAPI,应用ISAPI能够开发出高性能的应用程序。
ISAPI具有两类组件:ISAPI扩展和ISAPI过滤器,本文着重介绍ISAPI扩展的应用和开发。
ISAPI应用程序通过DLL实现,DLL的特性使它能够作为WEB服务器自身的扩充来装载。在
WEB服务器的地址空间运行,
而且只在第一次请求时装载一次,以后每一个后续请求通
过创建一个线程(仅用一个简单的函数调用)
来完成,这比CGI创建一个进程要节约大量
的时间和空间等资源。
ISAPI扩展通常代替传统Web应用程序中CGI脚本的位置,由客户触发,为其特殊请求服务。
------清单1--------------
1.<html>
2. <img src="myGetGrp.dll">
3.</html>
如清单1所示代码,服务器将调用myGetGrp.dll中提供的函数得到一GIF图像文件数据发
送给客户浏览器,在这里,myGetGrp.dll就是一个ISAPI扩展。
如果服务器确定将执行一个ISAPI扩展,
他首先检查此扩展是否已经装入高速缓存,若
没有,则指定的DLL被装载;装入DLL后,服务器就调用DLL中的HttpExtensionProc()函
数对请求提供服务, 这里是ISAPI程序员放置具体功能操作的位置,服务器将所有必要
的信息通过一结构类型参数传递给这个函数,包括请求本身的内容和程序员将用到的回
调函数等,用回调函数,可以将数据传递给用户以及执行其他的操作。
注意:必须牢记服务器是启动多线程来处理同时接收到的多个请求的,所以必须正
确处理线程间的同步,否则将会导致数据破坏甚至系统崩溃。
二、用C++ Builder开发ISAPI扩展应用程序 C++ Builder是Inprise公司继Delphi之后开发的又一个通用的客户/服务器结构的
开发工具。 它使用了C++语言,可以产生更快速和更高效的代码。目前已成为继Visual
Basic、Delphi之后,在32位Windows环境下最具有吸引力的开发工具之一。
启动C++ Builder后,用File→New菜单项打开New Items对话框,在New页面下选中
Web Server Application选项,单击<OK>按纽,弹出一New Web
Server Application对 话框,选中ISAPI/NSAPI Dynamic将生成一ISAPI扩展应用程序框架,其主模块缺省名为
Project.cpp,其中主要实现了DLL的三个输出函数,说明如下:
1.1 GetExtensionVersion()函数 这是一个非常简单的函数,
它唯一的目的是指定ISAPI版本,并给出扩展的描述。 当DLL第一次被装载时,由服务器调用。这发生在HttpExtensionProc()函数第一次调用
前, 在此函数中, 你所需做的全部就是用常量HSE_VERSION_MAJOR和HSE_VERSION_
MINOR(在Isapi2.hpp中定义)设置扩展版本域。并且返回一true值。
GetExtensionVersion()函数实现实例见清单2。
---------清单2-----------------
BOOL_export WINAPI GetextensionVersion(Isapi2::THSE_VERSION_INFO &Ver)
{ /*设置扩展版本域*/
Ver.dwExtensionVersion=MAKELONG(HSE_VERSION_MAJOR,HSE_VERSION_MINOR);
Ver.lpszExtensionDesc="Example ISAPI extension";//设置扩展描述域
return true; //返回true }
在此函数中,程序员还可以加入初始化代码,如全局变量的初始化等。
1.2 HttpExtensionProc()函数
HttpExtensionProc()
函数是扩展的功能实现部分,每次产生对扩展的请求,服务
器就调用这个函数,同时传递一类型为TEXTENSION_CONTROL_BLOCK结构的参数(ECB)
, 这个结构在Isapi2.hpp中定义:
struct TEXTENSION_CONTROL_BLOCK { unsigned cbSize;//结构大小 unsigned
dwVersion;//版本信息 unsigned ConnID; /*正在被服务的连接的ID;调用回调函数时必须作为一参数传递*/
unsigned dwHttpStatusCode;/*在HttpExtensionProc () 函数返回前,在此放置HTTP状态码,参见HTTP1.0规范定义*/
char lpszLogData[80];//接收一记录信息字符串 char *lpszMethod;//命名请求方式的字符串的指针
char *lpszQueryString;//含一个GET请求查询的字符串指针 char
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -