Delphi调试CGI或ISAPI 转

因为dll文件已驻留内存,可用intrabob进行调试,也可用PWS进行调试,不过要换文件。

  IntraBob是资深程序员Dr.Bob编写的免费工具软件,用于测试Delphi编写

的CGI/WinCGI/ISAPI程序,它可以代替PWS/IIS等WWW服务器软件,

调试本地的CGI/WinCGI/ISAPI程序,其原理是模拟PWS/IIS接受WWW请求,

并根据您的设置将类似于“http://www.123.com/testisapi.dll”

的远程URL映射到本地文件,如“d:\intrabob\demo\TestISAPI.dll”。

IntraBob目前的版本为5.0,支持调试Delphi3 -4 C/S、Delphi 5

Pro/Enterprise、

C++Builder3-4 C/S中的WebModules,同时全面支持WebBroker技术和Delphi5

中的InternetExpress。

  可以从http://www2.drbob42.com/drbob42/intrabob.zip下载IntraBob5.0软件

演示文件,IntraBob.zip文件解压缩后有六个文件,各个文件用途如下:

  Debug.dll:ISAPI程序,用于演示IntraBob的调试功能。

  Debug.dpr:ISAPI程序,Debug.dll的源代码,用于演示IntraBob的调试功能。

  Drbob42.zip:Internet组件,CRC、CRC32、SMTP、 POP3、FTP。

  Home.htm:调用演示ISAPI程序Debug.dll的HTML 页面文件。它是IntraBob程序

动时调用的默认页面。

  Intrabob.exe:IntraBob程序,用来调试CGI/ WinCGI/ISAPI程序。

  Readme:IntraBob程序功能介绍及使用方法。

  下面以IntraBob5.0和Delphi3.0为例介绍用 IntraBob调试CGI/WinCGI/ISAPI

程序

的方法。我们将用Delphi3.0编写一个简单的ISAPI 程序来演示IntraBob的用法。

假设IntraBob5.0被解压缩到文件夹“d:\intrabob\”下,被调试的ISAPI位于文件夹

“d:\intrabob\demo\”下。

一、调用页面

  首先,我们需要一个页面,该页面用于调用要调试的 ISAPI程序并向其传递参

数,

它要求用户输入姓名、性别、省份,用户提交后将这三个参数给

http://www.123.com/testisapi.dll用于显示。

该页面存为 “D:\INTRABOB\demo\testisapi.htm”,其HTML代码如下:

< HTML >

< HEAD >

< TITLE > 用IntraBob调试ISAPI < /TITLE >

< /HEAD >

< BODY >

< H2 > 用IntraBob调试ISAPI < /H2 >

< HR >

< FORM ACTION=“http://www.123.com/

testisapi.dll " METHOD=“POST " >

< br > 姓名: < INPUT TYPE=“text " NAME=“Name "

SIZE=“40 " value=‘王发军 ' >

< br > 性别: < INPUT TYPE=“radio "

NAME=“Sex "value=‘男 ' checked> 男

< INPUT TYPE=“radio "NAME=“Sex " value=‘女 ' > 女

< br > 省份: < Select Name=Province > < Option > 河南

< /Option > < Option > 河北 < /Option > < /Select >

< br > < INPUT TYPE=“SUBMIT " VALUE=“提交测试ISAPI " >

< INPUT TYPE=“RESET " VALUE=“重新填写 " >

< /FORM >

< /BODY >

< /HTML >

二、编写ISAPI程序

  然后,我们用Delphi3.0编写一个简单的ISAPI程序,接受姓名、性别、省份三个

参数并将其显示出来。

  (1)建立一个Web Server Application工程文件,选择“ISAPI/NSAPI Dynamic

Link Library”;

  (2)在WebModule1中增加一个WebActionItem1,在其OnAction事件中写下如下代

码:

procedure TWebModule1.WebModule1WebActionItem1Action

(Sender: TObject;Request: TWebRequest; Response:

TWebResponse; var Handled: Boolean);

var

Name,Sex,Province : string;

begin

Name := Request.ContentFields.values[‘name '];

Sex := Request.ContentFields.values[‘Sex '];

Province := Request.ContentFields.values[‘Province '];

Response.Content := ‘

您的输入如下: ';

Response.Content := Response.Content + ‘

姓名: ' + name;

Response.Content := Response.Content + ‘

性别: ' + sex;

Response.Content := Response.Content + ‘

省份: ' + Province;

Response.Content := Response.Content + ‘ ';

end;

  (3)将程序存到文件夹“d:\intrabob\demo\”下,命名工程文件为

TestISAPI.dpr。

  (4)用Ctrl+F9编译确保无语法错误,并生成ISAPI 程序文件TestISAPI.DLL。

三、用IntraBob5.0调试ISAPI程序

  1. 设置ISAPI工程文件运行参数

  将IntraBob.exe设置为TestISAPI.dpr的Host Application。在“Run”菜单下的

Parameters...”中,将Host Application设置为 “D:\INTRABOB\Intrabob.exe”,

如下图所示:

  另外,用F5在程序中设置一个断点,用于演示 IntraBob的调试功能。

  2.开始ISAPI程序调试

  用F9开始运行程序TestISAPI.DLL,IntraBob.exe 将随之启动,并会调用其默认

面“D:\INTRABOB\HOME.HTM”,在IntraBob.exe调用的IE 控件的地址栏输入我们的

调试

页面地址“D:\INTRABOB\demo\testisapi.htm”,可显示页面,如下图所示:

  3.设置IntraBob选项,调试ISAPI程序

  为了用IntraBob调试ISAPI程序,还需要设置 IntraBob选项,主要是将远程URL

射到本地文件,也就是将 “http://www.123.com/testisapi.dll”的远程URL映射到

本地文件 “d:\intrabob\demo\TestISAPI.dll”。选择“Options”页,IntraBob

已经从显示的页面中提取出远程URL“http://www.123.com/testisapi.dll”,并填

“Remote URL”栏,我们只需要将“Local App”栏指定为

“d:\intrabob\demo\TestISAPI.dll”即可。然后回到 “Browser”页,在测试页面

中点击“提交测试ISAPI”按钮来提交已输入的数据。此后,Delphi IDE的代码窗口

被激活,我们会看到程序已运行到刚才设置的断点处,我们就可以开始像调试普通应

用程序一样调试ISAPI程序了,剩下的就是Delphi程序调试技巧问题了。将ISAPI 运

行到结束,IntraBob将输出结果以“D:\INTRABOB\output.htm”的形式显示在

“Browser” 页中。由于IntraBob显示HTML页面时用的是微软提供的IE控件,我们可

以用鼠标右键来选择“后退”、 “刷新”、“查看源代码”等功能。

四、注意事项

  (1)如果在“Browser”窗口中刷新调试页面,IntraBob 选项将恢复为默认设

置,

此时可能需要在“Options”页中重新设置ISAPI的路径即重新设置“Local App”的

值。

否则可能出现类似“TerminateExtension crashed in testisapi.dll” 的错误。

  (2)IntraBob5.0不接受48K以上的提交数据。

  有了IntraBob这个工具软件,我们在本机上调试 CGI/WinCGI/ISAPI程序就不

必安装PWS或IIS了,同时也不用频繁启动和停止PWS/ⅡS、甚至重新启动计算机了。

  以上操作和程序在PWin98 + Delphi3.0 C/S + IntraBob5.0 + IE4.0及

PWinNT4.0

+ Delphi3.0 C/S + IntraBob5.0 + IE5.0下测试通过。