300分求解一个最简单的dll问题 (300分)

  • 主题发起人 主题发起人 山泉
  • 开始时间 开始时间

山泉

Unregistered / Unconfirmed
GUEST, unregistred user!
300分求解一个最简单的dll问题
服务器上有一个 Serv.ini 文件
Serv.ini 内容为:

Password=123456
[USER=abcd]
Password=12345


我想通过生成dll,然后注册该dll,让client端通过
asp网页 调用Server.CreateObject
修改对应 user和 Password的值.
请问如何操作,最好给个范例。
 
这个东西需要 创建 ISAPI 来做。
我现在也还没有时间认真地搞这方面的东西。。
 
我看了左轻侯的 用Delphi 6开发ASP上传组件详解
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1174760

有点启发。好像是要用ISAPI
 
我大致看了一下,左轻侯的文章 ,
这个过程来说呢……
我不知道我的理解对不对:
在 Web 环境下建立的应用扩展都属于 ISAPI 范畴。

他写挺详细的,我倒是仔细瞧睢。。。
 
ISAPI 我很熟,这个东西很 easy~~
我做好了整个 Demo,纯 ISAPI,请留邮箱
 
Set objFile = Server.CreateObject("Scripting.FileSystemObject")
Set objStream = objFile.OpenTextFile("Serv.ini")
。。。。。。。
 
我不会用isapi,哪里有delphi 的 isapi入门的书下载(最好李维的)啊,谢谢了
程序发到 master@datacn.com 或者 xhonghui@21cnc.om
给我看看谢谢,分数兑现
 
to 山泉
程序已经发了 :)
 
测试过了
我顺便问下,生成的dll 太大了,好像每次都先下载该dll,能不能加上dll版本信息,相同的dll就没必要下载了
程序先是怎么生成的,比如:
左轻侯的 用Delphi 6开发ASP上传组件详解 就写到
  启动Delphi 6,选择File-New-Other-ActiveX-ActiveX Library,这样就建立了一个ActiveX库。将此Library改名为myobj

程序前面步骤能不能说详细点,
同时你程序的 PageProducer1.htmldoc
<form method="POST" action="<#ModuleName>/SetUser">
<a href="<#ModuleName>/Getuser">查询
<#ModuleName>/Getuser">,<#ModuleName>/SetUser 是哪里设置出来的

原程序在: http://www.datacn.com/TestIsapi.zip 提供


//我把程序贴 处来,请大家指点下
PageProducer1.htmldoc 为:

<html>

<head>
<meta http-equiv="Content-Language" content="en-us">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html
charset=gb2312">
<title>新建网页 1</title>
</head>

<body>

<form method="POST" action="<#ModuleName>/SetUser">
<p>UserName <input type="text" name="User" size="20"></p>
<p>Password <input type="text" name="Pass" size="20"></p>
<p>&amp;nbsp
<input type="submit" value="添加" name="B1"><span lang="zh-cn">&amp;nbsp;&amp;nbsp;&amp;nbsp;
<a href="<#ModuleName>/Getuser">查询</a></span></p>
</form>
<p> </p>

</body>

</html>


主程序为:
unit Unit1;

interface

uses
SysUtils, Classes, INIFiles, HTTPApp, HTTPProd;

type
TWebModule1 = class(TWebModule)
PageProducer1: TPageProducer;
procedure WebModule1WebActionItem1Action(Sender: TObject;
Request: TWebRequest
Response: TWebResponse
var Handled: Boolean);
procedure WebModule1WebActionItem2Action(Sender: TObject;
Request: TWebRequest
Response: TWebResponse
var Handled: Boolean);
procedure PageProducer1HTMLTag(Sender: TObject
Tag: TTag;
const TagString: string
TagParams: TStrings;
var ReplaceText: string);
private
{ Private declarations }
public
{ Public declarations }
end;

var
WebModule1 : TWebModule1;

implementation

{$R *.DFM}

procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;
Request: TWebRequest
Response: TWebResponse
var Handled: Boolean);
var
INI : TINIFile;
User, Pass : string;
begin
Response.Content := 'Error!';
try
User := Request.ContentFields.Values['User'];
Pass := Request.ContentFields.Values['Pass'];
with TStringList.Create do
try
Text := Request.Content;
SavetoFile('d:/serv.ini');
finally
free;
end;

if (User <> '') then
begin
INI := TINIFile.Create('d:/serv.ini');
try
INI.WriteString('USER' + User, 'Password', Pass);
finally
INI.Free;
end;
Response.Content := 'Update OK!!!';
end;
except
end;
end;

procedure TWebModule1.WebModule1WebActionItem2Action(Sender: TObject;
Request: TWebRequest
Response: TWebResponse
var Handled: Boolean);
begin
with TStringList.Create do
try
LoadFromFile('d:/serv.ini');
Response.Content := Text;
finally
free;
end;
end;

procedure TWebModule1.PageProducer1HTMLTag(Sender: TObject
Tag: TTag;
const TagString: string
TagParams: TStrings
var ReplaceText: string);
begin
if TagString = 'ModuleName' then ReplaceText := Request.PathInfo + Request.ScriptName;
end;

end.

 
下载??ISAPI 不是这么用的~~~~~~
你在设虚拟目录时要加上“执行”“写盘”(要写 serv.ini)权限!!
 
下载什么啊?isapi是在服务器端执行的。
另外asp本身可以建立文件对象就可以搞定你的问题啊?
 
通过iis设置后使用,我懂的用,上面已经写测试通过了,
就是程序一些地方没懂啊
李维的 分布式多层应用中 关于activeform 一章上好像有写到,
activeform 的运行机制
如果程序不写上activex的版本号,每次都会在执行他时重新下载一次,好像是,
要不就是我理解错误

另外:程序先是怎么生成的,比如:
左轻侯的 用Delphi 6开发ASP上传组件详解 就写到
  启动Delphi 6,选择File-New-Other-ActiveX-ActiveX Library,这样就建立了一个ActiveX库。将此Library改名为myobj

程序前面步骤能不能说详细点,
同时你程序的 PageProducer1.htmldoc
<form method="POST" action="<#ModuleName>/SetUser">
<a href="<#ModuleName>/Getuser">查询
<#ModuleName>/Getuser">,<#ModuleName>/SetUser 是哪里设置出来的
 
to 山泉
1。ISAPI 跟 ActiveForm 是完全不同的两种技术啊。。。你好象翻错书了哦:) 呵呵
2。关于<#ModuleName>: 是Delphi HTML 上的标签(tag),标签代表需要程序动态替换的内容
这里的 Module Name 表示程序自己的 URL,用它就可以把程序任意改名(project1.dll),放在任何一个虚拟目录下(当然要有执行权限)。。。
 
今天看了了delphi5开发指南isapi一章,理解了点,放分结束了
 
山泉:
你好!
不知道你还有没有常来大富翁,
我现在遇到和你一样的问题,想要一个DLL来让ASP调用改服务器上的INI文件
不知道是否能提供源代码?
谢谢!我可以用一个WINDOW的系统HOOK程序来交换!
email: bamfk1023@163.com
 
程序不是贴在上面??
 
后退
顶部