哇考,谁给我写一个能在asp下用的dll?第一个完整回答的给200分(300分)

  • 主题发起人 主题发起人 ericmm
  • 开始时间 开始时间
E

ericmm

Unregistered / Unconfirmed
GUEST, unregistred user!
tnnd,竟然没写出来。
功能:修改某个文件中某一行的某个字符串,在asp中调用。
参数:文件路经和文件名,修改的某一行的字符串。

300分!其他人也有份

 
用VB编写ActiveX DLL实现ASP编程
ASP是目前一种广为应用的用来快速构建动态WEB站点的编程语言,默认的内置开发语言是VBScript,由于ASP和微软Windows系列操作系统的结合非常的好,使得ASP已经成为了NT开发平台上面进行WEB开发的首选语言和环境。他有着简单易学,方便快速开发的种种优点,但是他也有着致命的弱点,就是他是脚本语言解释执行的,速度会受到一定的影响,更为关键的是,使用ASP来开发完成一个项目之后,整个项目在交付客户使用的时候,是会连带所有的ASP脚本源代码的,也就无法将商业程序保密了,源代码泄漏会给自己造成很大的损失,虽然微软也相应的推出了用来加密ASP程序的软件,但是有着诸多的限制,以及会降低程序运行的速度和二次开发调试的难度,难道ASP做出来的项目就真的要暴露所有的源代码吗?
当然了,答案当然是否定的,因为世界上没有绝对不可能的事情,接下来就跟随我来看看如何利用VB的ActiveX DLL来实现将ASP程序封装起来吧,也就是我们可以使用ActiveX DLL来完成所有ASP能完成的事情,而ActiveX DLL是编译好的DLL文件,别人是无法得知你的源代码的,也就保证的自己的商业机密和核心技术,并且达到同样的效果,使用完全封装的ActiveX DLL会比完全适用ASP脚本语言的执行速度要快很多,尤其是大运算量的时候跟为明显!经过我们的具体测试,在操纵10000条数据库记录的时候,封装成为ActiveX DLL的WEB应用程序比纯ASP代码的应用程序,速度上面要快大约21%左右,在目前国内过于缓慢的网络来讲,速度就是一个WEB站点的很关键的一部分。并且采用了ActiveX DLL来开发WEB程序,要比单纯使用ASP好得多,毕竟ASP只能使用VBScript来开发,无法享用VB大量的优点,而ActiveX DLL则可以充分利用VB里面所有的特性。
下面我们先来看看什么是ActiveX DLL吧。ActiveX是微软提出的广泛应用于Windows系列的一种代码封装技术,提高了程序代码的可重用性,加快了程序项目的开发速度,一般被称为“组件”。在VB6的集成开发环境当中,我们可以看到一下几种ActiveX项目:

1、ActiveX EXE

这是在“过程外”运行的ActiveX/COM服务器组件,也就是说他们运行的过程和初始化组件的客户机代码不同。尽管可以用ASP访问ActiveX EXE,但是不推荐改动IIS元库,该库允许所有的可执行文件由服务器上运行的脚本代码启动。

2、ActiveX OCXs

这些特殊的组件把主机应用程序显示和操作组件所需的附加支持包含在GUI环境中。还可以把OCX组件放在网页当中。但是,OCX是应用程序界面,不可以使用ASP来创建的。

3、ActiveX文档DLL和ActiveX文档EXE

Active文档可以在OLE文件箱应用程序中,例如IE或者Office Binder,显示VB表单。但他们在ASP不能应用。

4、ActiveX DLLs

这些ActiveX/COM组件和初始化组件的客户机在同一个进程中运行。而我们要讨论的ActiveX DLL正是整个组件。一般微软的附加组件和其他的一些第三方厂家提供的各种组件都是这种类型的ActiveX DLL,但是并不全是使用VB编写的,同样可以使用VC/JAVA等等语言来开发。

探讨完了什么是ActiveX DLL,我们开始正式编写我们自己的ActiveX DLL,以便来实现ASP中的同样功能,众所周知,ASP内置了Response、Request、Server、Session、Application五个对象,其实这五个内置对象正是IIS控制台初始化的五个ActiveX DLL组件,既然IIS可以初始化这五个组件用于ASP中,我们当然也可以直接在我们的ActiveX DLL中引用这些组件来实现我们的编程,也就是说我们可以在VB应用程序中通过引用这些组件来实现访问ASP内置对象的功能。

只要你安装了PWS4或者IIS4以上的WEB服务器,你就拥有了一个名称叫做“Microsoft Active Server Pages Object”的对象库,我们可以在VB的ActiveX DLL应用中引用这个对象库,通过引用这个对象库,我们就获得了一个对象(类):ScriptingContext,这个对象也正是我们整个文章探讨的核心对象。对象库内的关系如下:

对象库      类        类成员

ASPTypeLibrary ScriptingContext Application

                 Request

                 Response

                 Session

                 Server

通过上面的关系图,我们就可以很容易理解类ScriptingContent。下面我们来看一个具体的例子吧:

1、 使用VB6创建一个新的ActiveX DLL项目

2、 引用“Microsoft Active Server Pages Object”对象库。

3、 创建两个组件事件:OnStartPage以及OnEndPage

4、 在事件OnStartPage中创建类ScriptingContent的一个引用。

5、 实例化类ScriptingContent。

Test.cls (类实现)

"对象的声明

Dim rp as Response

Dim rq as Request

Dim ap as Application

Dim sr as Server

Dim sn as Session

"当组件被创建的时候会触发这个事件

Public Sub OnStartPage(mysc as ScriptingContent)

"进行对象的实例化

set rp=mysc.Response

set rq=mysc.Request

set sr=mysc.Server

set ap=mysc.Application

set sn=mysc.Session

rp.write "<brActiveX DLL组件已经被创建了!<br"

End Sub

"当组件被销毁的时候触发这个事件

Public Sub OnEndPage()

Rp.write "<brActiveX DLL组件已经被销毁!<br"

"销毁对象

Set rp=nothing

Set rq=nothing

Set sr=nothing

Set ap=nothing

Set sn=nothing

End Sub

"定义我们自己的一个组件方法

Public Sub HelloWorld()

Rp.write "<H1Hello,World!</H1"

End Sub

这样,我们就创建可以访问ASP内置对象的ActiveX DLL了。我们命名这个组件项目为first,在VB中间编译这项目成为一个DLL文件first.dll,并且我们在系统中注册这个DLL文件。接下来,我们需要一个简单的几乎没有什么代码的ASP程序来调用这个组件:

test.asp

<html

<head

 <title测试ActiveX DLL</title

</head

<body

<%

Dim testme

"创建我们刚才编译成功的组件,一旦创建这个组件,同时会在叶面输出文字“ActiveX DLL组件已经被

"创建了!”

set testme=server.createobject("first.test")

"调用组件的方法

testme.HelloWorld

"注销组件,在注销的同时,会自动在叶面显示“ActiveX DLL组件已经被销毁!”

set testme=nothing

%

</body

</html

通过上面简单的例子,我们可以看到使用ActiveX DLL同样可以实现和ASP同样的功能,并且带来的代码保密和程序运行更加高效的优点。ActiveX DLL和纯ASP有着各自的优点和缺点,只要我们合理的运用这两种技术,比如适当的将商业逻辑封装在ActiveX DLL中,或者在需要保密的地方使用DLL封装技术,一定可以编写出高效快速的WEB应用程序。

(以上程序在VB6企业版、Windows2000 Server中文版测试通过)


小包
 
你就用VB写一个吧,不麻烦的。
 
老兄:你不会换行啊?
另:用delphi如何实现?
 
考,我已经会了,用delphi,vb,java各写了一个。

最楼上那位人兄是来贴教程的吗?
 
贴一文章:
Delphi开发用于ASP的OLE Automation Server
孙以义, 杜鹃

华东师范大学,200062, 上海

yysun@263.net

一、前言

ASP (Active Server Page)是微软公司的产品,作为其Web服务器的扩充,实现服务器端的脚本控制,它的优点是直接能嵌入HTML文档,相对于CGI方式,编程和测试均很方便。在一些文章中已经有所介绍。ASP本身是解释执行的,很难对系统作深层次的控制,但是ASP的最大特点是对OLE Automation的支持,这样使得它几乎获得了无限的可扩展性,例如配合微软的ADO (ActiveX Data Objects) 就能连接数据库,作数据处理和封装处理逻辑,以开发Web数据库应用系统。ASP产品本身带有了用VB/VC开发OLE Automation Server的实例,但是除了用VB或者VC++来开发OLE Automation Server以供ASP网页使用,Inprise公司的Borland Delphi 3 / 4 对OLE Automation Server也有着很好支持,某种程度上讲,用Delphi开发OLE Automation Server的方便程度超过了使用VC++的ATL。所以本文要介绍的是用Borland Delphi开发配合ASP 使用的OLE Automation Server的方法。



二、ASP示例说明

为了能清晰地说明这个技术方法,本文例举了一个实际例子。调用OLE Automation Server的ASP文件(Test.asp)如下:

<html>

<head>

<title> Delphi开发OLE Automation Server的试验</title>

</head>

<body>

下面一行字是由Delphi开发的OLE Automation Server输出的<hr>

<%

set DelphiObj = Server.CreateObject("MyServer.TestObj")

DelphiObj.WriteHelloWorld

Response.Write "<br> <hr>"

set DelphiObj = nothing

%>

</body>

</html>

这个ASP网页将创建一OLE Automation 对象,然后调用它的一个过程,在网页中输出一些文字,此OLE Automation 对象用Delphi开发,以下详细介绍开发方法。

三、OLE Automation Server的建立过程

1、创建ActiveX库(ActiveX Library)

Borland Delphi 3 / 4中有ActiveX Library的模板,启动Delphi,选择菜单 File | New,会出现“New Item”对话框(图1),在“ActiveX”页中选择“Library”,Delphi会自动创建一个新的DLL Project,其源代码如下:

library Project1;

uses ComServ;

exports

DllGetClassObject,

DllCanUnloadNow,

DllRegisterServer,

DllUnregisterServer;

{$R *.RES}

begin

end.




(图1)




2、创建Automation对象(Automation Object)

接下来可以使用Borland Delphi 3 / 4中Automation Object Wizard创建Automation对象,仍然选择菜单 File | New,在“New Item”对话框的“ActiveX”页中选择“Automation Object”,然后在“Automation Object Wizard”中输入Class Name为TestObj(图2) 。



(图2)


创建Automation对象时Delphi同时会生成类库,类库就是它们是外部程序可以调用的Automation对象的属性(property)和方法(method)的定义。在本例中定义了方法procedure WriteHelloWorld; 这个WriteHelloWorld的作用是让ASP调用,在网页中输出演示性文字用的定义好之后,按“Refresh”,Delphi自动生成代码框架。






unit Unit1;

interface

uses

ComObj, ActiveX, Project1_TLB;

type

TTestObj = class(TAutoObject, ITestObj)

protected

procedure WriteHelloWorld; safecall;

end;

implementation

uses ComServ;

procedure TTestObj.WriteHelloWorld;

begin


end;

initialization

TAutoObjectFactory.Create(ComServer, TTestObj, Class_TestObj, ciMultiInstance);

end.


框架中Delphi自动继承了TautoObject并包含我们定义的ItestObj接口(ItestObj则是从Idispatch继承下来),并且Delphi已经为我们生成了代码的输入点。编辑过程中,如果类库编辑窗口被关闭了,以后可以选择菜单View | Type Library来打开类库编辑窗口。

最后保存文件为uTestObj.pas,保存新的Project为MyServer.dpr。


3、编译和注册OLE Automation Server

选择菜单 Project | Compile,即能编译生成MyServer.dll,这个DLL要在网页中起作用,还需放置到具有执行属性的目录(例如 /scripts),并注册后才能使用,注册方法是使用regsvr32.exe,命令行: regsvr32 MyServer.dll,NT4中regsvr32.exe 往往在/winnt/system32/目录中,Windows95/98中regsvr32.exe 往往在/windows/system/目录中。

四、引入ASP的类库

上述过程解释了用Delphi创建一个通用的OLE Automation In-Process Server的过程,ASP页面已经可以用set DelphiObj = Server.CreateObject("MyServer.TestObj")来创建对象,但是该对象尚未能在网页中输出任何信息。如何在ASP页面中输出文字呢?这还需要引入ASP的类库,使得ASP中的对象能在Delphi程序中调用。方法是选择菜单 Project | Import Type Library,出现“对话框”,选择“Microsoft Active Server Pages Object Library” (图3),Delphi自动翻译ASP注册类库为Object Pascal 语法的说明ASPTypeLibrary_TLB.pas,这样就可以象一般的Delphi VCL一样方便地调用ASP中的注册对象了,它们是Application, Server, Session, Request and Response.






(图3)


其中Response就是ASP中可以输出文字的对象,要在网页中输出文字,我们只需如下修改:

1) 用类库编辑器为ItestObj,增加方法OnStartPage(MyScriptingContext: IUnknown);

2) 为TtestObj增加私有变量FScriptCtx: IScriptingContext;

3) 如下修改WriteHelloWorld和OnStartPage过程的代码。

4) 在uses 中加入ASPTypeLibrary_TLB;



最后uTestObj.pas变成为:

unit uTestObj;

interface

uses ComObj, ActiveX, MyServer_TLB, ASPTypeLibrary_TLB;

type

TTestObj = class(TAutoObject, ITestObj)

private

FScriptCtx: IScriptingContext;

protected

procedure WriteHelloWorld; safecall;

procedure OnStartPage(MyScriptingContext: IUnknown); safecall;

end;

implementation

uses ComServ;

procedure TTestObj.WriteHelloWorld;

begin

FScriptCtx.Response.Write('Hello World ! <br>');

end;

procedure TTestObj.OnStartPage(MyScriptingContext: IUnknown);

begin

FScriptCtx:=MyScriptingContext as IScriptingContext;

end;

initialization

TAutoObjectFactory.Create(ComServer, TTestObj, Class_TestObj, ciMultiInstance);

end.



存盘并编译出新的MyServer.DLL,试验载入Test.asp,就会出现入图的页面(图4)。




(图4)





五、结语

本文展示了用Borland Delphi快速方便地开发出能供ASP网页调用的OLE Automation Server的方法。虽然上文仅演示了Response及其write功能,其他几个对象如Application, Server, Session, Request等使用的方法是相同的,例如Request.Cookie来设置网页的个性化参数等等,本文介绍的例子可以作为一个通用模板,作为用Delphi开发具有更加复杂功能的OLE Automation Server起点。

 
tnnd,竟然没写出来。
功能:修改某个文件中某一行的某个字符串,在asp中调用。
参数:文件路经和文件名,修改的某一行的字符串。

300分!其他人也有份

要修改文件,涉及到一个权限的问题,asp运行的账号是iuser_xxx,
建议把目录的用户权限改成everyone。

修改某行字符串这也太简单了吧?
procedure changeline(filename: string; lineindex: integer; changeto: string);
var
s: tstringlist;
begin
s := tstringlist.create;
try
s.loadfromfile(filename);
if s.count >lineindex then
s[lineindex] := changeto;
s.savetofile(filename);
finally
s.free;
end;
end;
写com的时候把这个函数封装一下就成了。
 
接受Adnil答案了
 
后退
顶部