附录C 快速学会ASP元件
本章介绍ActiveX伺服器元件的技巧,包括读写伺服器档案、Page Counter访客计数器、Content Rotator内容轮播器、Ad Rotator广告轮播器、取得浏览器资讯、Content Linking管理URL、Permission Checker允许检查、自制ActiveX伺服器元件等。
ActiveX Server Components
使用Active Server Pages的「ActiveX伺服器元件」(ActiveX Server Components),可让您重复使用设计好的功能(像副程式般可以一再地重复呼叫使用),制作出动态、互动的网页内容。
「ActiveX Server Components」,以前叫做「Automation servers」,让您将网站伺服器成为网页应用程式的一部份。ASP内建的「ActiveX伺服器元件」提供了存取资料库、读写伺服器档案、轮流显示广告图片、得知用户端浏览器的资讯、和管理超连结表等精彩的功能。
Active Server Pages可经由「ActiveX伺服器元件」来扩充增加功能,可使用Visual Basic、Java、Visual C++、COBOL等程式语言来发展。
「ActiveX伺服器元件」一般由.asp档案的ASP程式码所呼叫使用,但是也可以由ISAPI应用程式、其他伺服器元件、或其他OLE相容的语言所呼叫。
Active Server Pages内含数个内建的「ActiveX伺服器元件」,如下:
IIS 5.0比IIS 4.0新增加Counters、Tools、Logging Utility叁个可安装的元件。
除了这些「内建」的「ActiveX伺服器元件」,您可以制作自己的「ActiveX伺服器元件」,来符合自己特殊的需求,以增加扩充Active Server Pages的功能,您可使用Visual Basic、Java、Visual C++、COBOL等程式语言来发展。或购买别人已经开发好的「ActiveX伺服器元件」来使用。建议您使用浏览器连线到 http://www.microsoft.com/iis 以下载新的components。
定义一个ActiveX伺服器元件
要使用「ActiveX伺服器元件」(ActiveX Server Components)须先定义。定义一个ActiveX伺服器元件,以产生ActiveX伺服器元件的instance,定义後即可呼叫此ActiveX伺服器元件的方法(methods)、或存取其属性(properties)。
定义一个「ActiveX伺服器元件」有两个方法:
<% Set bc = Server.CreateObject("MSWC.BrowserType")%>
<OBJECT RUNAT=Server ID=MyAd ROGID="MSWC.AdRotator"> </OBJECT>
一般而言,您可以於Global.asa使用<OBJECT> 标记,定义使用於一个session、或application的ActiveX伺服器元件。
C-1 如何存取IIS伺服器的档案呢?
使用ASP内建的一个ActiveX伺服器元件,称为File Access component(档案存取元件),可以存取IIS伺服器的档案。
写入资料到一个伺服器的档案的方法,如下:
Set FileObject = Server.CreateObject("Scripting.FileSystemObject")
TestFile = Server.MapPath("写入的档案名称")
Set OutStream= FileObject.CreateTextFile(TestFile, True, False)
OutStream.WriteLine "写入的资料"
其中「OutStream.WriteLine」为写入一行的资料。
从一个伺服器的档案读取资料的方法,如下:
Set FileObject = Server.CreateObject("Scripting.FileSystemObject")
TestFile = Server.MapPath("读取的档案名称")
Set InStream= FileObject.OpenTextFile(TestFile, 1, False, False)
"读取的资料" = Instream.Readline
InStream.SkipLine()
其中「Instream.Readline」为读取一行的资料。「InStream.SkipLine( )」为跳下一行。
读写伺服器档案范例
看个例子就知道如何使用了!
於用户端使用浏览器,浏览aspfile.asp执行的结果如下,显示读写伺服器档案的结果:
ASP程式码,如下:
<%
Set FileObject = Server.CreateObject("Scripting.FileSystemObject")
TestFile = Server.MapPath("asptest.txt")
Set OutStream= FileObject.CreateTextFile(TestFile, True, False)
OutputString = "读写测试..." & Now()
OutStream.WriteLine OutputString
Response.Write "於档案: " & TestFile & "<br> 写入:
" & OutputString & "<P>"
OutStream.Close
Response.Write "於档案: " & TestFile & "<BR> 读取: "
Set InStream= FileObject.OpenTextFile(TestFile, 1, False, False)
While not InStream.AtEndOfStream
Response.Write Instream.Readline & "<BR>"
Wend
Instream.Close
%>
另一个读写伺服器档案范例
写入资料时所使用的「Set OutStream= FileObject.CreateTextFile(TestFile, True, False)」也可以改为「Set OutStream= FileObject.CreateTextFile(TestFile, 2)」;读取资料时所使用的「Set InStream= FileObject.OpenTextFile(TestFile, 1, False, False)」也可以改为「Set InStream= FileObject.OpenTextFile(TestFile, 1)」,如下:
ASP程式码aspfile.asp,如下:
<%
Set Object1 = Server.CreateObject("Scripting.FileSystemObject")
file1 = Server.MapPath("test1.txt")
Set out1 = Object1.CreateTextFile(file1, 2)'write
For x = 1 to 3
out1.WriteLine "第 " & x & " 行写入 " & now & "<br>"
Next
out1.Close
Set in1 = Object1.OpenTextFile(file1, 1)'read
Response.Write in1.ReadAll
in1.Close
%>
其中「ReadAll」为读取所有行的资料。
於用户端使用浏览器,浏览aspfile.asp执行的结果如下,显示读写伺服器档案的结果:
好玩吗 ?
访客计数器范例
常见的访客计数器,记录访客的次数,每次有访客浏览此网页,自动将访客计数器加一并显示出来,就可以使用读写伺服器档案的方式来产生。
於用户端使用浏览器,浏览aspfile.asp执行的结果如下,显示访客计数器的次数:
ASP程式码,每次载入会读写伺服器档案aspcount.txt,此档案只储存一个数字而已,每次将加一再储存回去,如下:
<%
CountFile = Server.MapPath("aspcount.txt")
Set FileObject = Server.CreateObject("Scripting.FileSystemObject")
Set Out= FileObject.OpenTextFile(CountFile, 1, FALSE, FALSE)
counter = Out.ReadLine
Out.Close
SET FileObject = Server.CreateObject("Scripting.FileSystemObject")
Set Out= FileObject.CreateTextFile(CountFile, TRUE, FALSE)
Application.lock
counter= counter + 1
Out.WriteLine(counter)
Application.unlock
Out.Close
%>
<%=UserName%> 您是第 <%=FormatNumber(counter,0)%> 位访客.
<A href = "aspfile.asp">再度光临</A>
其中使用「Application.lock」暂时禁止别人使用,以写入访客计数器档案aspcount.txt,写完再使用「Application.unlock」解除之。
座右铭范例
可不可以做到每次载入网页时,都给一个不同的资讯呢 ? 譬如,给一个不同提示、座右铭。
於用户端使用浏览器,浏览aspfile.asp执行的结果如下,每次载入网页时,都得到一个不同的座右铭:
ASP程式码,使用「Int(10 * Rnd)」产生一个随机0-9的乱数,由asptips.txt档案读取那一行的座右铭,如下:
<%
Randomize
tipsNo = Int(10 * Rnd)
Response.Write "座右铭编号: " & tipsNo & "<P>"
tipsfile = Server.MapPath("asptips.txt")
Set InStream = FileObject.OpenTextFile(tipsfile, 1, False, False)
While tipsNo > 0
InStream.SkipLine()
tipsNo = tipsNo-1
Wend
TipOfTheDay = Instream.ReadLine
Response.Write "今天的座右铭: <FONT COLOR=BLUE><BR><B>
" & TipOfTheDay & "</B></FONT>"
InStream.Close
%>
座右铭asptips.txt档案的内容如下:
日行一善 诚恳待人 让生命热烈灿烂地开放 勿做政客 ... 利害当前 方现真正人性
您的座右铭是什麽呢 ?
FileSystemObject物件
读写伺服器档案所用到的FileSystemObject物件、和TextStream物件,是否想知道得更详细一些呢 ?
FileSystemObject物件存取电脑的档案,语法如下:
Scripting.FileSystemObject
FileSystemObject物件提供数个方法(methods):
object.BuildPath(path, name)
object.CopyFile source, destination[, overwrite]
譬如:
FileSystemObject.CopyFile "c:\temp\*.doc", c:\test\"
object.CopyFolder source, destination[, overwrite]
譬如:
FileSystemObject.CopyFolder "c:\temp\*", "c:\test\"
object.CreateFolder(foldername)
object.DeleteFile filespec[, force]
object.DeleteFolder folderspec[, force]
object.DriveExists(drivespec)
object.FileExists(filespec)
object.FolderExists(folderspec)
object.GetAbsolutePathName(pathspec)
object.GetBaseName(path)
object.GetDrive drivespec
object.GetDriveName(path)
object.GetExtensionName(path)
object.GetFile(filespec)
object.GetFileName(pathspec)
object.GetFolder(folderspec)
object.GetParentFolderName(path)
object.GetSpecialFolder(folderspec)
object.GetTempName
object.MoveFile source, destination
object.MoveFolder source, destination
检查档案是否存在
以下举一个使用FileExists方法检查档案是否存在的例子。
於用户端使用浏览器,浏览执行aspfile.asp的结果如下,检查default.htm档案是否存在:
ASP程式码,使用FileExists方法检查default.htm档案是否存在,如下:
<%
On Error Resume Next
Set oFS = Server.CreateObject("Scripting.FileSystemObject")
FileExist1 = oFS.FileExists(Server.MapPath("default.htm"))
If Err = 0 And FileExist1 Then
chkresult2 = "存在"
Else
chkresult2 = "不存在"
End If
%>
<% = chkresult2 %>
CreateTextFile方法
CreateTextFile方法产生文字(text)档,并传回一个TextStream物件,以读写所产生的文字档。
语法如下,其中中括弧[...]部份为选项,可有可无:
[object.]CreateTextFile(filename[, overwrite[, unicode]])
以下的例子显示如何写入一个文字档的资料:
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("c:\test.txt", True)
a.WriteLine("快速掌握Internet技术.")
a.Close
第一行使用CreateObject函数传回FileSystemObject(fs),第二行CreateTextFile方法产生一个文字档(c:\test.txt),第叁行WriteLine方法於所产生的文字档写入一行的资料(快速掌握Internet技术),第四行Close方法清除缓冲器资料、并关闭此文字档。
OpenTextFile方法
OpenTextFile方法开启文字档,并传回一个TextStream物件,以读取、或附加写入(append)所产生的文字档。
语法如下,其中中括弧[...]部份为选项,可有可无:
[object.]OpenTextFile(filename[, iomode[, create[, format]]])
以下的例子显示如何开启一个文字档,并附加写入资料:
Dim fs, a
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.OpenTextFile("c:\test.txt", ForAppending, FALSE)
...
a.Close
有意思吗 ?
TextStream物件
TextStream物件循序存取(sequential access)电脑的档案,语法如下:
TextStream变数.{property | method}
TextStream物件方法(methods)
TextStream物件的方法(methods)有几个:
TextStream物件属性(properties)
TextStream物件的属性(properties)有几个:
Dim fs, a, retstring
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.OpenTextFile("c:\testfile.txt", ForReading, False)
Do While a.AtEndOfLine <> True
retstring = a.Read(1)
...
Loop
a.Close
im fs, a, retstring
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.OpenTextFile("c:\testfile.txt", ForReading, False)
Do While a.AtEndOfStream <> True
retstring = a.ReadLine
...
Loop
a.Close
以下的例子显示如何写入一个文字档的资料:
Set fs = CreateObject("Scripting.FileSystemObject")
Set abc = fs.CreateTextFile("c:\test.txt", True)
abc.WriteLine("快速掌握Internet技术.")
abc.Close
第一行使用CreateObject函数传回FileSystemObject(fs),第二行CreateTextFile方法产生一个文字档(c:\test.txt),abc即为TextStream变数,第叁行使用这个TextStream变数(abc)的WriteLine方法於所产生的文字档写入一行的资料(快速掌握Internet技术),第四行Close方法关闭此文字档。
C-2 如何用Ad Rotator轮播广告呢?
Ad Rotator Component的应用
ASP内建的一个ActiveX Server component,叫做Ad Rotator Component(广告轮播器元件),让广告图片轮流显示於网页上,您可设定各广告出现的机率。
看个例子就知道「广告轮播器」是什麽东西了!
於用户端使用浏览器,浏览aspadrot.asp执行的结果如下,每次载入此网页时,可能看到不同的广告图片:
「广告轮播器」的应用设计,十分简易,只要两行ASP程式码如下:
<% Set Ad = Server.CreateObject("MSWC.Adrotator")%>
<%= Ad.GetAdvertisement("aspadv.txt")%>
广告图片须准备一个 「Rotator Schedule File」(轮播行程档案)的文字档,譬如以上所设定的aspadv.txt,内容如下:
redirect aspdir.asp width 300 height 40 border 1 * 1.gif activex.htm ActiveX应用技术大公开 20 2.gif idesign.htm Internet程式设计宝典 20 3.gif html.htm 动态网页设计99招 30
您可看到所设定轮流显示的叁个图片档名(1.gif、2.gif、3.gif),和所设定各广告出现的机率(20、20、30),「activex.htm」等档为当此广告图片被按到时所连结的HTML档案,「ActiveX应用技术大公开」等文字为图片未显示前的替代显示文字。
其中所用到的「Redirection File」档案aspdir.asp,内容如下:
<% Response.Redirect(Request.QueryString("url"))%>
另一个「广告轮播器」范例
再看看另一个例子就知道「广告轮播器」如何设计了!
於用户端使用浏览器,浏览aspadrot.asp执行的结果如下,每次载入此网页或按下 再度光临 时,可能看到不同的广告图片:
aspadrot.asp的ASP程式码也十分简易,如下:
<% Set ad1 = Server.CreateObject("MSWC.AdRotator")%>
<%= ad1.GetAdvertisement("aspadv2.txt")%>
<A href = "aspadrot.asp">再度光临</A>
广告图片须准备一个 「Rotator Schedule File」的文字档,譬如以上所设定的aspadv2.txt,内容如下:
redirect aspdir.asp width 106 height 135 border 1 * book8.gif Booklst8.htm
Internet Explorer4推播频道设计班
20 book7.gif Booklst7.htm
Internet Explorer4动态HTML设计班
20 book4.gif Booklst4.htm NT动态网站速成班 10 ...
您可看到所设定轮流显示的八个图片档名(book1.gif~book8.gif),和所设定各广告出现的机率(20、20、10、...),「Booklst8.htm」等档为当此广告图片被按到时所连结的HTML档案,「Internet Explorer4推播频道设计班」等文字为图片未显示前的替代显示文字。
其中所用到的「Redirection File」档案aspdir.asp,内容如下:
<% Response.Redirect(Request.QueryString("url"))%>
是否想知道Ad Rotator Component更详细一些的资料呢 ?
Ad Rotator Component语法
Ad Rotator component(广告轮播器元件)将广告图片自动轮流显示於网页上,每次载入此网页时,可能看到不同的广告图片。
显示的广告图片於一个「Rotator Schedule File」(轮播行程档案)档案设定。您可设定此档案的REDIRECT参数,当此广告图片被按到时,连结到广告客户的网页,此将被记录於Web server activity logs。
所用到的档案,如下:
语法,如下:
Set AdRotator = Server.CreateObject("MSWC.AdRotator")
Ad Rotator属性(properties)
Ad Rotator属性(properties)如下:
<%
Set ad = Server.CreateObject("MSWC.AdRotator")
ad.BorderSize(0)
%>
<%= ad.GetAdvertisement("/ads/adrot.txt")%>
<%
Set ad = Server.CreateObject("MSWC.AdRotator")
ad.Clickable(FALSE)
%>
<%= ad.GetAdvertisement("/ads/adrot.txt")%>
<%
Set ad = Server.CreateObject("MSWC.AdRotator")
ad.TargetFrame(Frame100)
%>
<%= ad.GetAdvertisement("/ads/adrot.txt")%>
Ad Rotator方法(methods)
Ad Rotator方法(methods)如下:
<% Set NextAd = Server.CreateObject("MSWC.AdRotator")%>
<%= NextAd.GetAdvertisement("/ads/adrot.txt")%>
Rotator Schedule File
Rotator Schedule File(轮播行程档案)设定广告图片、大小、和轮流显示机率等Ad Rotator component用到的资讯。
语法如下,其中中括弧[ ]部份为选项,可有可无:
[REDIRECT URL] [WIDTH numWidth] [HEIGHT numHeight] [BORDER numBorder] * adURL adHomePageURL Text impressions
Rotator Schedule File的例子,譬如:
REDIRECT /scripts/adredir.asp WIDTH 440 HEIGHT 60 BORDER 1 * http://ads/a.gif http://www.abc.com/ WWW技术与设计 20 http://ads/d.gif - MAPI技术与设计 20 http://ads/c.gif http://www.who.com/ USENET技术与设计 10
Redirection File
Redirection File设定广告图片被按到时的连结redirection,并将启动各个广告图片被按到次数的记录。一般设定为如下的内容,当各个广告图片被按到时,连结到於Rotator Schedule File设定之各个广告客户的网页:
<% Response.Redirect(Request.QueryString("url"))%>
您可在此档案加入script程式码以计算各个广告图片被按到的次数,并记录到伺服器的档案。
有趣吗 ?
C-3 如何用Content Rotator轮播内容?
Content Rotator Component的应用
ASP内建的一个ActiveX Server component,叫做Content Rotator Component(内容轮播器元件),让HTML内容轮流显示於网页上,您可设定各内容出现的机率。
「内容轮播器」范例
看个例子就知道「内容轮播器」是什麽东西了!
於用户端使用浏览器,浏览aspcont.asp执行的结果如下,每次载入此网页时,可能看到不同的内容:
「内容轮播器」的应用设计,也十分简易,只要两行ASP程式码如下:
Set cont1 = Server.CreateObject("MSWC.ContentRotator")
Response.Write("促销活动:<br>" & cont1.ChooseContent("aspcont1.txt"))
轮播的内容请准备一个叫做「Content Schedule File」(轮播行程档案)的文字档,譬如以上设定的aspcont1.txt,内容如下:
%% #1 <Font color=blue size=+2>跳楼大拍卖</Font><BR> 列表机NT$2,999 ! %% #2 <IMG SRC="book8.gif"><br> 新书介绍: <A href = "Booklst8.htm"> Internet Explorer4推播频道设计班</A> %% #2 <IMG SRC="book5.gif"><br> 畅销书: <A href = "Booklst5.htm"> NT网站资料库速成班 设计实例篇班</A> %% #1 钢琴买一送一!
您可看到所设定轮流显示的四个轮播的内容(位於%%下的HTML码),和所设定各内容出现的机率为1、2、2、1(位於#後的数字)。
另一个「内容轮播器」范例
再看看另一个例子就可更清楚了!
於用户端使用浏览器,浏览aspcont.asp执行的结果如下,每次载入此网页时,可能看到不同的内容:
「内容轮播器」的ASP程式码如下:
<%
Set cont1 =Server.CreateObject("IISSample.ContentRotator")%>
技术支援: <% = cont1.ChooseContent("aspcont2.txt")%>
轮播的内容的aspcont2.txt,内容如下:
%% #1 <a href="mailto:chen@abc.com">陈明</a> %% #2 <a href="mailto:jack@abc.com">王子馨</a> %% #1 <a href="mailto:gary@abc.com">姜子牙</a> %% 抱歉 公司旅游中
您可看到所设定轮流显示的四个轮播的内容(位於%%下的HTML码),和所设定各内容出现的机率为1、2、1、1(位於#後的数字),未设定则表示为1。
Content Rotator语法
Content Rotator的语法,首先定义如下:
Set cont1 = Server.CreateObject("IISSample.ContentRotator")
轮流显示的HTML码於一个「Content Schedule File」(轮播行程档案)的行程档案当中设定,设定如下:
cont1.ChooseContent("行程档案名称")
其中ChooseContent为Content Rotator的方法(methods)之一。
Content Rotator提供的方法(methods)如下:
<% = cont1.GetAllContent("aspcont2.txt")%>
於用户端使用浏览器,浏览执行的结果如下,显示aspcont2.txt所有的内容,中间以横线分隔之:
有趣吗 ?
Content Schedule File
Content Schedule File(轮播行程档案)设定内容、和轮流显示机率等Content Rotator component用到的资讯。
语法如下,其中中括弧[ ]部份为选项,可有可无:
%% [#Weight] [//Comments] ContentString
有意思吗 ?
C-4 Content Linking如何管理URL?
Content Linking Component
使用ASP内建的一个ActiveX Server component,叫做Content Linking component(内容连结元件),让您能够很方便地使用一个文字档Content Linking List File,来管理超连结、上一页、下一页等连结功能。几行的ASP程式码,加上准备一个URL表的文字档即可。若URL表内容有所变动,网页内容将自动更新,而不须修改网页的程式码。
看个例子就知道「Content Linking component」的功能!
於用户端使用浏览器,浏览asplink.asp执行的结果如下,将一个aspnlink.txt档案所有的URL位址和叙述转成超连结:
asplink.asp的ASP程式码,使用GetNthURL(listURL, n)得知Content Linking List File中的第n个URL位址,使用GetNthDescription(listURL, n)得知其叙述。如下:
<% Set NLink = Server.CreateObject("MSWC.NextLink") %>
<% count = NLink.GetListCount("aspnlink.txt")%>
<% I = 1 %>
快速掌握Internet技术
<ol>
<ul>
<% Do While(I <= count) %>
<li><a href=" <%= NLink.GetNthURL("aspnlink.txt", I)%> ">
<%= NLink.GetNthDescription("aspnlink.txt", I)%> </a>
<% I =(I + 1) %>
<% Loop %>
</ul>
</ol>
所用到的aspnlink.txt内容,如下:
activex.asp 1. ActiveX应用技术大公开 idesign.asp 2. Internet程式设计宝典 html.asp 3. 动态网页设计99招
接着要看看「上一页」、「下一页」的功能,如下:
於用户端使用浏览器,浏览idesign.asp执行的结果如下,按 上一页、下一页 时,会根据aspnlink.txt内容的顺序,超连结到相关的网页,譬如按 上一页 将显示目前网页「2. Internet程式设计宝典」(第二个)的上一个网页「1. ActiveX应用技术大公开」(第一个):
idesign.asp的ASP程式码,如下:
<% Set NLink = Server.CreateObject("MSWC.NextLink") %> 这页是:
<% = NLink.GetNthDescription("aspnlink.txt"
,NLink.GetListIndex("aspnlink.txt"))%><BR>
GetListIndex = <% = NLink.GetListIndex("aspnlink.txt")%> <p>
上一页: <a href=" <%= NLink.GetPreviousURL("aspnlink.txt")%>
"><% = NLink.GetPreviousDescription("aspnlink.txt")%></a>
<BR> 下一页: <a href=" <%= NLink.GetNextURL("aspnlink.txt")%>
"><% = NLink.GetNextDescription("aspnlink.txt")%></a>
使用GetPreviousURL和GetPreviousDescription取得「上一页」的URL位址和叙述,使用GetNextURL和GetNextDescription取得「下一页」的URL位址和叙述。
Content Linking语法
是否想知道Content Linking Component更详细一些的资料呢 ?
Content Linking component(内容连结元件),让您很方便地使用一个储存於文字档的URL表,来管理超连结、上一页、下一页等连结功能。
只要准备一个文字档,以後若URL表有增减修改,只要更新这个文字档即可,网页内容将自动更新,您不须修改网页的程式码。
这个功能很适合用於线上新闻、公共讯息等用途。
所用到的档案,如下:
语法如下:
Set NextLink = Server.CreateObject("MSWC.Nextlink")
Content Linking方法(methods)
Content Linking方法(methods)如下:
请看个例子就知道方法(methods)是如何使用了!
於用户端使用浏览器,浏览asplink.asp执行的结果如下,因目前显示的网页asplink.asp不在Content Linking List File当中,因此GetListIndex=0,GetPreviousURL传回Content Linking List File的第一个URL位址,GetNextURL传回Content Linking List File的最後一个URL位址:
找一个在Content Linking List File当中目前所显示的网页idesign.asp,因此GetListIndex等方法就能传回正确的值,如下:
ASP程式码,如下:
GetListCount = <% = NLink.GetListCount("aspnlink.txt")%> <BR>
GetListIndex = <% = NLink.GetListIndex("aspnlink.txt")%> <p>
GetNthDescription = <% = NLink.GetNthDescription("aspnlink.txt",2)%>
<BR>
GetNthURL = <% = NLink.GetNthURL("aspnlink.txt",2)%> <p>
GetNextDescription = <% = NLink.GetNextDescription("aspnlink.txt")%>
<BR>
GetNextURL = <% = NLink.GetNextURL("aspnlink.txt")%> <p>
GetPreviousDescription = <% = NLink.GetPreviousDescription
("aspnlink.txt")%> <BR>
GetPreviousURL = <% = NLink.GetPreviousURL("aspnlink.txt")%>
Content Linking List File
Content Linking List File是一个文字档,储存URL的顺序表,包括URL位址、叙述、和注解,须置於网站的virtual path。
一个URL位址和其叙述、和注解须写为一行,结尾为carriage return,URL位址、叙述、和注解中间以TAB分隔之。
语法如下,其中中括弧[]部份为选项,可有可无:
Web-page-URL [ text-description [ comment]]
有趣吗 ?
C-5 如何用Page Counter计数网页?
Page Counter(网页计数器)的应用
在上几节当中,我们使用读写伺服器档案的方式,来产生常见的访客计数器,以记录访客的次数,并显示出来。
您也可以使用ASP内建的一个ActiveX Server component,叫做Page Counter Component(网页计数器元件),来记录访客的次数,每次有访客浏览此网页,会自动将访客计数器加一。
Page Counter(网页计数器)范例
请看个例子就知道Page Counter(网页计数器)如何使用了!
於用户端使用浏览器,浏览asppcont.asp执行的结果如下,每次有访客浏览此网页,会自动将访客计数器加一,并显示出来:
Page Counter(网页计数器)的ASP程式码如下:
<%
Set pCounter1 = Server.CreateObject( "MSWC.PageCounter" )
pCounter1.PageHit
%> 您是第 <% = pCounter1.Hits %> 位访客!<p>
您光临此网页 <% = pCounter1.Hits("/iis5samp/asppcont.asp")%> 次!<p>
<A href = " asppcont.asp ">再度光临</A>
解说如下:
定义後即可以使用Page Counter所提供的叁个方法(methood):
学会了吗 ?
C-6 如何用Counters计数器呢?
Counters(计数器)
可以使用ASP内建的一个ActiveX Server component,叫做Counters Component(计数器元件),以产生、储存、新增、读取多个个别的计数器。
使用Counters Component(计数器元件)时必须先於global.asa档案中定义如下:
<OBJECT RUNAT=Server SCOPE=Application ID=Counter PROGID="MSWC.Counters"> </OBJECT>
计数器的内容储存於以下路径之Counters.txt档案中:
\WinNT\system32\inetsrv\Data\Counters.txt
Counters(计数器)方法
Counters(计数器)方法如下:
Counters(计数器)范例
请看个例子就知道Counters(计数器)如何使用了!
於用户端使用浏览器,浏览aspcounter.asp执行的结果如下,每次有访客浏览此网页,会自动将计数器加一,并显示出来:
Counters(计数器)的ASP程式码如下:
第 <% = Counters.Increment("visitors")%> 位访客.
Increment将visitors计数器加一。
Counters.txt档案中储存计数器的内容如下:
visitors:14
旅游地点投票范例
让我们多看几个范例,您可以使用Counters(计数器)来做为投票结果的统计,譬如针对旅游地点做投票,浏览aspcounter.asp执行的结果如下,每次有投票某一旅游地点时,会自动将计数器加一,并显示出来:
相关的ASP程式码如下:
<%
If Request("vote")= "1" Then
Counters.Increment("place1")
Elseif Request("vote")= "2" Then
Counters.Increment("place2")
Else
Counters.Increment("place3")
End If
%>
<P>投票结果:
<P><A href=aspcounter.asp?vote=1>大陆桂林</A> <%
=Counters.Get("place1")%>
<P><A href=aspcounter.asp?vote=2>泰国</A> <%
=Counters.Get("place2")%>
<P><A href=aspcounter.asp?vote=3>澳洲</A> <%
=Counters.Get("place3")%>
每次有投票某一旅游地点时,由Request("vote")取得投票旅游地点,Increment方法自动将此旅游地点之计数器加一,而Get方法取得计数器的值。
Counters.txt档案中储存计数器的内容如下:
place3:6 place1:0 place2:7
Set/Remove范例
让我们看看Set方法、Remove方法范例,您可以使用Counters(计数器)来做为投票结果的统计,譬如针对旅游地点做投票,浏览aspcounter.asp执行的结果如下,每次有投票某一旅游地点时,会自动将计数器加一,并显示出来:
相关的ASP程式码如下:
<HR>Counters.Set<p>
<%
Counters.Increment("pagehit")
Response.Write Counters.Get("pagehit")
Counters.Set "pagehit", 100
Response.Write "<BR>"
Response.Write Counters.Get("pagehit")
%>
<HR>Counters.Remove<p> <%
Counters.Increment("test1")
Response.Write Counters.Get("test1")
Counters.Remove("test1")
Response.Write Counters.Get("test1")
%>
Counters.Set "pagehit", 100设定计数器pagehit的值为100。Counters.Remove("test1")移除计数器test1。
学会了吗 ?
C-7 如何使用取得浏览器资讯呢?
ASP内建的一个ActiveX Server component,叫做「Browser Capabilities component」(浏览器资讯元件),可提供用户端使用浏览器的功能资讯给网站伺服器。
浏览器版本
若得知用户端使用的浏览器版本,您可以依据不同浏览器,提供不同的网页内容。
由navigator.appName可得知用户端使用的浏览器名称和版本,譬如:
<SCRIPT LANGUAGE="JavaScript">
<!--
document.write("浏览器: " + navigator.appName +
" 版本: " + navigator.appVersion)
// -->
</SCRIPT>
使用不同的浏览器,浏览aspbrow.asp执行的结果如下,显示浏览器名称和版本:
这可不是ASP程式码!这种方式是先由网站伺服器下载判断的网页,於用户端浏览器判断浏览器的版本,判断後再向网站伺服器要求适合执行的网页内容。
让我们看看ASP程式码如何於网站伺服器就得知用户端使用的浏览器版本 ? 而直接传送适合其执行的网页内容。
看个例子就知道「Browser Capabilities component」是什麽东西了!
於用户端使用不同的浏览器,执行aspbrow.asp的结果如下,显示了浏览器名称和版本:
ASP程式码如下:
<%
Set a = Server.CreateObject("MSWC.BrowserType")
msg = "浏览器: " + a.Browser + "<br>版本: " + a.Version %>
<%=msg %>
浏览器资讯
可以得到更多的浏览器资讯吗 ?
於用户端使用不同的浏览器,浏览aspbrow.asp执行的结果如下,显示浏览器的资讯:
ASP程式码如下:
<% Set bc = Server.CreateObject("MSWC.BrowserType")%>
<Table border=1 cellpadding=0 cellspacing=0>
<tr>
<td>Browser Name</td>
<td> <%=bc.Browser %> </Td>
<tr>
<td>Browser Version</td>
<td> <%=bc.Version %> </Td>
<tr>
<td>Major Version</td>
<td> <%=bc.Majorver %> </Td>
<tr>
<td>Minor Version</td>
<td> <%=bc.Minorver %> </Td>
<tr>
<td>Frame Support</td>
<td> <%=bc.Frames %> </Td>
<tr>
<td>Table Support</td>
<td> <%=bc.Tables %> </Td>
<tr>
<td>Cookie Support</td>
<td> <%=bc.Cookies %> </Td>
<tr>
<td>Background Sound Support</td>
<td> <%=bc.BackgroundSounds %> </Td>
<tr>
<td>VBScript Support</td>
<td> <%=bc.VBScript %> </Td>
<tr>
<td>JavaScript Support</td>
<td> <%=bc.JavaScript %> </Td>
</table>
是否想知道Browser Capabilities component更详细一些的资料呢 ?
Browser Capabilities语法
Browser Capabilities component(浏览器资讯元件),提供用户端使用浏览器的功能资讯给网站伺服器。
当浏览器连线到网站伺服器时,会自动传送一个User Agent HTTP header表头,这个表头包括浏览器的版本,Browser Capabilities component将之与Browscap.ini档案所定义的[HTTPUserAgentHeader]相比较。
若发现传送来的表头与一个[HTTPUserAgentHeader]相符合时,Browser Capabilities component以此[HTTPUserAgentHeader]所定义的浏览器特性,视为用户端使用的浏览器特性。
若未发现任何一个符合的浏览器时,Browser Capabilities component使用Browscap.ini档案中的[Default Browser Capability Settings]预设浏览器特性,当做用户端使用的浏览器特性。若Browscap.ini档案中未定义[Default Browser Capability Settings],则设定每一个浏览器特性为未知的「UNKNOWN」。
您可以於Browscap.ini档案加入新推出的浏览器特性。
所用到的档案,如下:
语法如下:
Set BrowserType = Server.CreateObject("MSWC.BrowserType")
Browscap.ini档案
Browscap.ini为一个文字档,可设定浏览器特性以与浏览器连线传来的User Agent HTTP header表头比较。
於Browscap.ini档案,您可以设定多个浏览器的特性。也可以设定预设的浏览器特性,若未发现任何一个符合的浏览器时,则使用Browscap.ini档案中预设的浏览器特性[Default Browser Capability Settings]当做用户端所使用的浏览器之特性。
定义一个浏览器特性时,提供比较用的[HTTPUserAgentHeader],和定义此浏览器的所有特性。
语法如下:
[; comments] [HTTPUserAgentHeader] [parent = browserDefinition] [property1 = value1] ... [propertyN = valueN] [Default Browser Capability Settings] [defaultProperty1 = defaultValue1] ... [defaultPropertyN = defaultValueN] Parameters comments
[Mozilla/2.0(compatible; MSInternet Explorer 3.0;* Windows 95)]
表示以下的HTTP User Agent header都算吻合:
[Mozilla/2.0(compatible; MSInternet Explorer 3.0; Windows 95)] [Mozilla/2.0(compatible; MSInternet Explorer 3.0; AK; Windows 95)] [Mozilla/2.0(compatible; MSInternet Explorer 3.0; SK; Windows 95)] [Mozilla/2.0(compatible; MSInternet Explorer 3.0; AOL; Windows 95)]
若比较多个[HTTPUserAgentHeader]都吻合,以第一个吻合的浏览器特性为准。
范 例
以下的例子, Internet Explorer 3.0、Mozilla/2.0(compatible; MSInternet Explorer 3.01*; Windows 95)、Netscape 3.0、Microsoft Internet Explorer/4.40.308(Windows 95) 为[HTTPUserAgentHeader],将与浏览器传送的User Agent HTTP header表头比较。若相同,则以其下列定义的浏览器特性,当做用户端所使用的浏览器之特性。
[Default Browser Capability Settings]定义预设的浏览器特性,若未发现任何一个符合的浏览器时,则以其下列定义的预设浏览器特性当做用户端所使用的浏览器之特性。
Internet Explorer 3.01浏览器将继承parent浏览器Internet Explorer 3.0的所有特性(譬如frames=TRUE, tables=TRUE, and cookies=TRUE等),并新定义platform=Win95,和version=3.01盖掉原Internet Explorer 3.0的version定义。
;;ie 3.0 [Internet Explorer 3.0] browser=Internet Explorer Version=3.0 majorver=#3 minorver=#0 frames=TRUE tables=TRUE cookies=TRUE backgroundsounds=TRUE vbscript=TRUE javascript=TRUE ActiveXControls=TRUE Win16=False beta=False AK=False SK=False AOL=False ;;ie 3.01 [Mozilla/2.0(compatible; MSInternet Explorer 3.01*; Windows 95)] parent=Internet Explorer 3.0 version=3.01 minorver=01 platform=Win95 [Netscape 3.0] browser=Netscape version=3.0 majorver=#3 minorver=#0 frames=TRUE tables=TRUE cookies=TRUE backgroundsounds=FALSE vbscript=FALSE javascript=TRUE javaapplets=TRUE ActiveXControls=FALSE beta=False [Microsoft Internet Explorer/4.40.308(Windows 95)] browser=Internet Explorer version=1.0 majorver=#1 minorver=#0 frames=FALSE tables=FALSE cookies=FALSE backgroundsounds=FALSE vbscript=FALSE javascript=FALSE javaapplets=FALSE platform=Windows95 ; Default Browser [Default Browser Capability Settings] browser=Default frames=FALSE tables=TRUE cookies=FALSE backgroundsounds=FALSE vbscript=FALSE javascript=FALSE
您学会了吗 ?
C-8 Permission Checker如何使用呢?
Permission Checker的应用
ASP内建的一个ActiveX Server component,叫做「Permission Checker Component」(允许检查元件),可让设计者检查使用者是否有权存取某个档案,以便决定显示不同的网页内容给不同的使用者。
您也可以使用Permission Checker Component来检查某个档案是否存在。
Permission Checker范例
请看个例子就知道「Permission Checker」如何使用了!
於用户端使用浏览器,浏览asppchk.asp执行的结果会出现以下的画面,True表示使用者有权存取哪个档案,False则表示使用者无权存取哪个档案:
asppchk.asp的ASP程式码如下:
<% Set Check = Server.CreateObject("MSWC.PermissionChecker")%>
Physical Path = <%= Check.HasAccess(Server.MapPath
("asppchk.asp"))
%>(<% = Server.MapPath("asppchk.asp")%>)<br>
Virtual Path = <%= Check.HasAccess("/iis5samp/asppchk.asp")%>
(/iis5samp/asppchk.asp)<br>
Physical Path = <%= Check.HasAccess("c:\winnt\notepad.exe")%>
(c:\winnt\notepad.exe)
请看以下的解说!
Permission Checker语法
Permission Checker的语法,首先定义如下:
Set Check = Server.CreateObject("MSWC.PermissionChecker")
Check:设定呼叫Server.CreateObject产生的物件名称。
接着就可以使用Permission Checker提供的HasAccess方法(methods),检查使用者是否有权存取某个档案,如下:
Check.HasAccess(Server.MapPath("档案"))
档案路径可为虚拟或绝对的URL位址。
HasAccess方法的结果,若为True表示使用者有权存取这个档案,False则表示使用者无权存取这个档案。
若使用Anonymous(匿名)身份验证方式,因所有使用者都使用相同的身份进入,Permissions Checker component无法针对每一个使用者检查是否有权存取某个档案。
若网路仅仅使用於企业内部,建议您不使用Anonymous(匿名)的方式,以便让Permissions Checker component针对每一个使用者做检查。
C-9 如何用Tools呢?
Tools元件
ASP内建的一个ActiveX Server component,叫做「Tools」(工具元件),可提供判断档案是否存在、取得 -32768 ~ 32767乱数等功能。Tools可使用的方法如下:
FileExists(filename)方法:判断档案filename是否存在。
Random方法:取得 -32768 ~ 32767乱数。
Tools范例
看个例子就知道「Tools」如何使用了!
於用户端使用浏览器,浏览asptools.asp执行的结果会出现以下的画面:
asptools.asp的ASP程式码如下:
Tools.FileExists<P>
<%
Set Tools = Server.CreateObject("MSWC.Tools")
Response.Write "Tools.FileExists('book13.gif') = " &
Tools.FileExists("book13.gif")& "<BR>"
If Tools.FileExists("book13.gif")then
Response.Write "<
a href=bookls13.htm><img src=book13.gif></a>"
End If
%>
<HR>
Tools.Random<BR>
<% = "<BR> -32768 ~ 32767乱数 : Tools.Random = "
& Tools.Random %>
<% = "<BR>0 ~ 99乱数 :(Abs( Tools.Random ))Mod 100 = "
&(Abs( Tools.Random ))Mod 100 %>
FileExists(filename)判断档案filename是否存在,Random取得 -32768 ~ 32767乱数。
C-10 如何自制ActiveX伺服器元件呢?
扩充Active Server Pages的功能
除了IIS「内建」的ActiveX Server Components,您可以制作自己的ActiveX Server components,来达成符合自己特殊的需求,以增加扩充Active Server Pages的功能。
ActiveX Server component,可使用Visual Basic、Java、Visual C++、COBOL等程式语言来发展。本章介绍如何使用Visual Basic 6.0版本,来设计制作自己的ActiveX Server components。
执行自制的ActiveX伺服器元件
笔者制作了一个可以读写INI档案的ActiveX伺服器元件,名称为「aspini.dll」。
若要执行笔者自己制作的ActiveX伺服器元件,首先必须先於您的Windows NT上登记注册,於DOS下执行「regsvr32」,执行 开始/程式集/命令提示字元 ,於本书范例的路径下,输入『regsvr32 aspini.dll』以登记注册ActiveX伺服器元件aspini.dll,若成功将显示如下画面:
第一个范例
接着,即可执行第一个范例aspcomp.asp,这个范例将数字123,呼叫ActiveX伺服器元件aspini.dll,乘以10後传回结果1230,并显示於用户端的浏览器上。
aspcomp.asp程式码,其中「INIFile」为project名称,「RW」为class名称,「x10」为此ActiveX伺服器元件的方法,显示於用户端的浏览器上,如下:
<% Set a = Server.CreateObject("INIFile.RW") %>
结果: <% = a.x10(123) %>
於用户端使用浏览器,浏览aspcomp.asp执行的结果如下,显示1230:
读取INI档案的内容
第一个范例好像没有什麽用途。但是这个范例您可能用得上,就是读取INI档案的内容,譬如有一个aspini.ini内容如下:
[User] Name=jack Email=jack@abc.com.tw
读取INI档案内容的语法,如下:
Set a = Server.CreateObject("INIFile.RW")
读取值 = a.ReadValue(Request.Form("ini档案的路径档名"
,"中括弧的段落名称", "栏名")
其中「ReadValue」为此ActiveX伺服器元件的方法。"中括弧的段落名称",譬如"User";"栏名",譬如"Name" ,则"读取值"为" jack"。
如何透过笔者制作的ActiveX伺服器元件「aspini.dll」,来读取INI档案的内容呢?请看看以下的例子吧!
於用户端使用浏览器,浏览aspcomp.htm执行的结果如下:
填好aspini.ini的路径档案名称後,按下 写完了 按钮:
aspcomp.htm相关表单的程式码如下,於用户端使用浏览器填好aspini.ini的路径档案名称後,按下 写完了 按钮,将呼叫执行伺服器的aspcomp1.asp档案,如下:
读取INI值<P> <form action="aspcomp1.asp" method="post"> INI档案: <INPUT TYPE=TEXT NAME="INIFile" VALUE="c:\asp\aspini.ini"> <br><input type=submit VALUE="写完了"> </form>
所呼叫执行的aspcomp1.asp程式码如下,其中由Request.Form("INIFile")得知INI档案的路径档案名称。「INIFile」为project名称,其中「RW」为class名称。其中「ReadValue」为此ActiveX伺服器元件的方法,将读到的INI内容显示於用户端的浏览器上,程式码如下:
<% Set a = Server.CreateObject("INIFile.RW")
Name1 = a.ReadValue(Request.Form("INIFile"),"User", "Name")
EMail1 = a.ReadValue(Request.Form("INIFile"),"User", "EMail")
%>
读取INI值结果...<p>
姓名: <% = Name1 %> <BR>
EMail: <% = EMail1 %> <BR>
写入INI档案的内容
如何写入INI档案的内容呢 ? 写入INI档案内容的语法,如下:
Set a = Server.CreateObject("INIFile.RW")
b=a.WriteValue("ini档案的路迳档名" ,"中括弧的段落名称",
"栏名","写入值")
其中「WriteValue」为此ActiveX伺服器元件的方法,"中括弧的段落名称",譬如"User";"栏名",譬如"Name";"写入值",譬如"eric"。
如何透过笔者自己制作的ActiveX伺服器元件「aspini.dll」,来写入这个INI档案的内容呢 ? 请看看以下的例子吧!
於用户端使用浏览器,浏览aspcomp.htm执行的结果如下:
填好要写入的值後,按下 写完了 按钮,将写入INI档案并读取之,显示如下:
修改後的aspini.ini内容,如下:
[User] Name=eric Email=eric@ms1.hinet.net
aspcomp.htm相关表单的程式码如下,於用户端使用浏览器填好後,按下 写完了 按钮,将呼叫执行伺服器的aspcomp2.asp档案,如下:
写入INI值<P> <form action="aspcomp2.asp" method="post"> 姓名: < INPUT TYPE=TEXT NAME="Name" VALUE="大名"><br> EMail: <INPUT TYPE=TEXT NAME="EMail" VALUE="xxx@xxxxx"><br> INI档案: <INPUT TYPE=TEXT NAME="INIFile" VALUE="c:\asp\aspini.ini"> <br><input type=submit VALUE="写完了"> </form>
所呼叫执行的aspcomp2.asp程式码如下,其中由Request.Form("INIFile")得知INI档案的路径档案名称,由Request.Form("Name")得知修改後的Name值,由Request.Form("Email")得知修改後的Email值。「INIFile」为project名称,其中「RW」为class名称。其中使用此ActiveX伺服器元件的方法「WriteValue」写入INI档案内容,再使用此ActiveX伺服器元件的方法「ReadValue」读取INI档案内容,将读到的INI内容显示於用户端的浏览器上,程式码如下:
<%
Set a = Server.CreateObject("INIFile.RW")
b=a.WriteValue(Request.Form("INIFile"),"User", "Name",
Request.Form("Name"))
b=a.WriteValue(Request.Form("INIFile"),"User", "EMail",
Request.Form("Email"))
Name1 = a.ReadValue(Request.Form("INIFile"),"User", "Name")
EMail1 = a.ReadValue(Request.Form("INIFile"),"User", "EMail")
%> 读写INI值结果...<p>
姓名: <% = Name1 %> <BR>
EMail: <% = EMail1 %> <BR>
您学会了吗 ?
制作ActiveX伺服器元件
本节介绍如何使用Visual Basic 6.0版本,来设计制作自己的ActiveX伺服器元件。
以笔者所制作的ActiveX伺服器元件「aspini.dll」为例,原始码为asprwini.vbp,您可使用Visual Basic 6.0版本开启之,并加以参考对照。
以下的步骤将教您制作出这个ActiveX伺服器元件:
步骤一 命名project名称
执行Visual Basic 6.0後,选择建立「ActiveX DLL」新专案如下:
第一个步骤就是命名此project名称,此project名称将於定义此ActiveX伺服器元件「Set a = Server.CreateObject("project名称.class名称")」时使用。要执行Visual Basic 6.0版本,请选择 专案 选单的 属性 ,选择 一般 标签页,并於 专案名称 栏位输入此专案的名称『INIFile』,如下:
步骤二 加入Class
一个Class包括ActiveX伺服器元件的方法(methods)、和属性(properties),此步骤加入一个Class,以便以後定义一些方法。
若要加入一个Class,请选择 专案 选单的 新增物件类别模组 ,於Name填入Class的名称『RW』,如下:
此Class的名称将於定义此ActiveX伺服器元件「Set a = Server.CreateObject("project名称.class名称")」时用到 。
步骤叁 加入Class的方法
此步骤加入一个Class的方法,以便呼叫使用。
若要加入一个Class,请加入以下程式码到名称为RW的Class,「x10」为方法,将输入值data乘以10後输出,如下:
Public Function x10(data)
x10 = data * 10
End Function
画面如下:
步骤四 加入ActiveX伺服器元件的进入点
ActiveX伺服器元件需要一个进入点,呼叫时将由此进入点开始执行,当使用「Set a = Server.CreateObject("project名称.class名称")」以得到物件的instance时,即将执行此ActiveX伺服器元件的进入点「Sub Main」的程式。
若要加入一个ActiveX伺服器元件的进入点,请选择 专案 选单的 属性 ,於启动物件的画面,选择「Sub Main」後按 确定 键,如下:
步骤五 储存project并产生DLL档
接着,选择 档案 选单的 储存专案 来储存专案,接着,产生DLL档。请选择 档案 选单的 制成INIFile.dll ,产生DLL档名为「aspini.dll」。
步骤六 登记注册DLL档
若要执行自己制作的ActiveX伺服器元件,首先必须先於您的Windows NT上登记注册,於DOS下执行「regsvr32」,执行 开始 /程式集 / 命令提示字元 ,於「aspini.dll」的路径下,输入『regsvr32 aspini.dll』以登记注册ActiveX伺服器元件aspini.dll。或者使用 元件服务 ,来使用Transaction Server管理此元件。
此时已大功告成,您即可使用上一节范例的方法呼叫这个自己所制作的ActiveX伺服器元件。
制作读写INI档案的ActiveX伺服器元件
除了使用简易的乘法外,您可以於自己制作的ActiveX伺服器元件,呼叫Windows的API使用,譬如读写INI档案的Windows API为GetPrivateProfileString和WritePrivateProfileString。
读取INI档案内容的方法,如下:
Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA"(ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String)As Long Result% = GetPrivateProfileString(SectionName, KeyName, "Error", RetValue$, 100, FileName)
写入INI档案内容的方法,如下:
Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA"(ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String)As Long Result% = WritePrivateProfileString(SectionName$, KeyName$, Value$, FileName$)
如何於自己制作的ActiveX伺服器元件,呼叫GetPrivateProfileString和WritePrivateProfileString之Windows API呢 ?
本节范例,能够读写INI档案的ActiveX伺服器元件,制作方法与上面步骤相同,请於步骤四中加入Class的两个方法,一个是ReadValue方法读取INI档案内容,如下:
Public Function ReadValue(FileName$, SectionName$, KeyName$)
Dim RetValue$, Result%
RetValue$ = String$(100, 0)
Result% = GetPrivateProfileString(SectionName, KeyName,
"Error", RetValue$, 100, FileName)
ReadValue = Left$(RetValue$, Result%)
End Function
另一个是ReadValue方法读入INI档案内容,如下:
Public Function WriteValue(FileName$, SectionName$, KeyName$, Value$) Dim Result% Result% = WritePrivateProfileString(SectionName$, KeyName$, Value$, FileName$) End Function
您须於Module1宣告所用到的GetPrivateProfileString和WritePrivateProfileString,如下:
Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA"(ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String)As Long Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA"(ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String)As Long
有趣吗 ?