`
zhaohaolin
  • 浏览: 1010674 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

使用VC++6.0制作ASP服务器控件简介[转]

 
阅读更多

用ASP写网页的程序 员,一定对VBSript语句“Set Conn=Server.Object(‘ADODB.Connection’)”非常熟悉。该语句是利用ASP的Server对象创建了一个数据库控 件,它提供了一系列的方法和属性,可以帮助我们在ASP中方便的实现数据库的操作。类似的,在Visual InteDev6.0中,我们还可以看到一些ASP的内置组件如“Scripting.FileSystemObject”。但是,在有的场合,仅利用这 些是不够的或复杂的,而且ASP的Script语言远不如C++语言功能强大(如建立链表,B+树结构等),这就使我们想到,是否可以在开发网页时使用具 有良好数据结构的C++语言。虽然CGI,ISAPI等都可谓是用C/C++开发网页的先驱,但我们知道CGI,ISAPI的开发周期很长,且不与网页结 合,直观性差,编写、调试困难;而在稳定性上,由于ISAPI是动态链接的方式,因此在执行若出现问题,会使得Web服务器一起瘫痪。而ASP正好能补足 这些缺点。

由此可见,如果能学会编写ASP组件就能结合ASP的长处编写出强大的网页。可惜的是,笔者在市面上很少看到有专门讲如何用VC++来制作ASP组件的书 籍。一般VC书籍只讲一些写Windows窗口程序或再加上编写普通的动态链接库。而ASP书籍更是只谈ASP中内置组件的使用方法。其实,如果要真正掌 握编写ASP组件的机制,要牵涉到大量的COM技术的知识。而一些讲COM技术的书是很深奥的,且很少能结合有用的实例。为此,笔者想借此文以最简单的方 法向大家介绍编写过程。所谓简介,正说明将不涉及COM知识的具体细节,仅给出实现方法。
一、建立工程
打开VC++6.0,选择New Projects中的ALT COM AppWizard, 并输入好工程名(如MyStudio),记住该工程名将成为ASP组件名的一部分(其实可以修改,但很麻烦),在下一页上选择Server Type 为DLL,并可考虑在Support MFC前打勾(想必使用MFC编程的人不少)。按Finish结束。在生成的代码中有四个标准的导出函数注册DLL的,我们不必关心。
二、创建COM对象(新建ATL活动模版库类)
在菜单上选择Insert New Class,并新建一个ATL Class,如取名为CmyComponent,你会发现在接口表中出现了一个ImyComponent,以后创建该接口的方法和属性就可以在ASP中使 用了。把Aggregatable选项去掉,我们不需要它。保持其他不变。
三、添加接口方法
在ClassView中,右击ImyComponent,在出现的菜单中按Add Method。如图,在Method Name中可写上方法名如InitMyComp。在Parameters中写上方法的参数如[in]int Number1,[out,retbal]int* Number2。这里要特别说明的是参数的写法。
1.对于传入的参数必须在参数前加上[in],然后可跟上如int n或float f等。且每个传入参数前都必须写明。
2.对于调用方法的返回,不再是该方法名前的类型(因为所有这些方法都返回HRESULT,即表明是否调用成功),所以使用传出的参数,在参数前必须加上 [out,retval],然后可跟上如int* n 或者float* f等(如果返回的是int 或float 类型值时)。且每个方法仅限于返回一个这样的参数。在函数体中可如写上如“*Number2=Number1;”,表示把输入参数作为传出参数。
3.对于最常用的字符串参数在此我们使用BSTR str而不是通常的char* 或CString,所以在参数中需要写作[in]BSTR str 或[out,retval]BSTR* str。需要特别注意与CString的转换。如新建一个函数StrConv([in]BSTR bstr1,[out,retval]BSTR* bstr2),在函数体中可写上如:
CString str;
str=bstr1;
str=str.Left(str.GetLength()-1);
*bstr2=str.AllocSysString();
4.对于想把一个ASP对象作为参数的方法(如Request对象),可以使用[in]Iunkown *pIUnk,在函数体内,可用如下语句:(具体请查阅MSDN中的相关类的内容)
IRequest* pIRequest;
HRESULT hr = pIUnk->QueryInterface(IID_IRequest, reinterpret_cast<LPVOID*>(&pIRequest));
Long m_lDataSize;
HRESULT hr = pIRequest->get_TotalBytes(&m_lDataSize);
if (FAILED(hr))
return hr;
if (m_lDataSize == 0L)
{
return S_OK;
}
COleVariant varBytesToRead;
COleSafeArray sarrayBytes;
varBytesToRead = m_lDataSize;
sarrayBytes.CreateOneDim(VT_UI1, m_lDataSize);
hr = pIRequest->BinaryRead(&varBytesToRead, &sarrayBytes);
if (FAILED(hr))
{
sarrayBytes.Clear();
return hr;
}
5.对于不定个数参数,可使用SAFEARRAY,但使用方法较为复杂。可以在参数中输入如下的内容[in]SAFEARRAY array,并按Attribute…按钮,在Name中选择vararg。按确定后修改idl文件在把[in]SAFEARRAY array改为[in]SAFEARRAY(VARIANT) array。然后再打开MyComponent.h文件把该函数的参数SAFEARRAY array改为SAFEARRAY* array。再打开MyComponent.cpp文件修改参数,在函数体内使用COleSafeArray类实现该参数的控制,如 “COleSafeArray SArray(array,VT_BSTR)”,具体操作可查阅MSDN中的该类的成员函数。
四、添加接口属性
在ClassView中,右击ImyComponent,在出现的菜单中按Add Property。如图,在Property中可选择属性类型如float,在下面可写上属性名如MyFloat。保持其他不变。这里需要说明的是在生成 的put_MyFloat和get_MyFloat函数体中的书写。
不妨举个小例:
1.在CMyComponent 中添加成员变量m_myFloat
2.在put_MyFloat 中写上:m_myFloat=newVal;
3.在get_MyFloat中写上:*pVal=m_myFloat
有成员变量也是它优于ISAPI的一个地方,在ISAPI中要在网页间传递信息,只能通过URL参数或者是Cookie来实现,因为每次调用都是一次新的 链接,无法在网页之间仍然是同一次调用DLL,所以设置成员变量意义不大,只在一次调用中有用。而那两种方法都只能传递很有限的字符,除非利用创建服务器 端临时文件(此方法很不好)。再说,ASP中的Session对象本身就是很好的存储信息的对象。
至此,我们创建了一个非常简单的没有什么功能的ASP组件,意在说明如何制作。下面,我们书写一个简单的ASP网页,来看看如何使用。网页如下:
<%@ Language=VBScript %>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
</HEAD>
<BODY>
<%
Set Obj=Server.CreateObject("MyStudio.MyComponent")
j=Obj.InitMyComp(5)
Response.Write(j)
%>
<p>
<%
Obj.MyFloat=3.9
j=Obj.MyFloat
Response.Write(j)
%>
<p>
<%
str1="abcd"
str2=Obj.StrConv(str1)
Response.Write(str2)
%>
</BODY>
</HTML>
显示结果为:
5
3.9
abc

也许,你现在还看不到编写ASP组件的巨大魅力。但是,如果你正在编写搜索引擎,文件上传,自动回复,等等的高级网页制作,你若能够充分的利用VC++的 优越编程手段,就不必在CGI,ISAPI中苦苦挣扎,可以比较方便的编写这些功能。比方说用户想在你的网页上搜索几个著名新闻网站上当前的重要新闻,你 就可以使用ASP组件在后台实时的打开各网站获得信息,筛选匹配后显示给用户。又比方说,当注册用户告知他的email地址,你就可以利用ASP组件自动 给新注册用户发出确认信函,用最快的方式让用户去确认并使注册成功……其实,你一定还有很多新的想法可以在网页上得以实现,赶快行动吧。

分享到:
评论

相关推荐

    VC++6.0绿色完整版

    【VC++6.0绿色完整版】是一款经典的微软Visual C++开发环境的简化版本,它无需正式安装,只需解压后即可使用,方便快捷。这个绿色版确保了下载过程的安全性,不含任何附加软件,用户可以放心下载。在使用前,建议...

    vc++6.0_windows7版

    尽管之后有更新的版本如VC++ 2005、2008、2010等,但很多开发者仍然偏好于使用VC++ 6.0,因为它轻巧、稳定且对旧代码支持良好。 2. **功能特性**:VC++ 6.0包含了一个强大的IDE(集成开发环境),支持源代码编辑、...

    VC++6.0制作出来的播放器

    在本项目中,我们讨论的是使用VC++6.0开发的一个简单播放器,它与流行的“天天静听”播放器类似,适用于个人或学生进行毕业设计。VC++6.0是Microsoft公司推出的一款经典的集成开发环境(IDE),主要用于编写Windows...

    vc++6.0入门教程(PDF编辑版)整理.pdf

    VC++6.0 是一个功能强大且广泛应用的集成开发环境(IDE),本教程旨在指导读者从零开始学习和掌握 VC++6.0 的使用。下面是 VC++6.0 入门教程的概述: 1. 桌面上的快捷方式:双击快捷方式可以直接运行 VC++6.0。 2....

    VC++6.0免安装 绿色

    **VC++6.0免安装绿色版**是微软公司开发的一款经典的C++集成开发环境(IDE),在教育领域,尤其是高校计算机教学中被广泛使用,因其便捷性和稳定性,也深受考研及计算机等级考试考生的青睐。它是一个无需安装、便携...

    VC++6.0 支持win7

    **VC++6.0在Windows 7环境下的兼容性与使用指南** Visual C++ 6.0(简称VC++6.0)是微软发布的一款经典且功能强大的C++集成开发环境,它在20世纪90年代末期推出,成为许多开发者编写Windows应用程序的首选工具。...

    VC++6.0 Edit 使用示例(含多项功能)

    在本文中,我们将深入探讨如何在VC++6.0环境下使用Edit控件,这是一个非常基础且重要的组件,常用于创建用户界面,允许用户输入和显示文本。Edit控件提供了多种功能,包括改变文本的视觉样式,处理文本数据,以及与...

    VC++6.0 界面美化包,已编绎

    2. **增强型控件**:提供了比原生VC++6.0更丰富、功能更强大的控件,如改进的列表视图、树视图、表格控件等。 3. **Office风格界面**:引入了类似Microsoft Office的用户界面,使得操作更加直观和一致。 4. **图标和...

    VC++6.0安装pthread库过程图解

    本篇将详细介绍如何在VC++6.0中安装和使用pthread库。 首先,我们需要获取pthread库。pthread库通常在Unix/Linux系统中是内建的,但在Windows上需要额外下载。可以从官方网站或者其他可靠的开源软件仓库下载适用于...

    图解VC++6.0中使用mscomm串口控件

    ### 图解VC++6.0中使用mscomm串口控件 #### 一、简介 在探讨如何在VC++6.0中使用mscomm串口控件之前,我们需要先了解几个基本概念。**mscomm控件**(Microsoft Communications Control)是微软提供的一种用于串行...

    VC++6.0源代码实例

    【VC++6.0源代码实例】是一款基于微软的Visual C++ 6.0开发环境的游戏项目,展示了如何使用C++编程语言构建一款与手机游戏相媲美的应用程序。这款名为"推箱子"的游戏,通常被称为Sokoban,是经典的逻辑益智游戏,...

    图析VC++6.0中使用mscomm串口控件

    其中,MSComm控件是一个广泛使用的组件,它简化了在VC++6.0中实现串行通信的过程。以下是对如何在VC++6.0中使用MSComm串口控件的详细解析: ### 图析VC++6.0中使用mscomm串口控件 #### 建立基于对话框的MFC程序 ...

    VC++6.0中MsChart控件的用法

    VC++6.0 中 MsChart 控件的用法 MsChart 是 VC++6.0 中自带的一个特殊控件类,用于绘制坐标曲线图。它提供了丰富的绘制曲线图的功能,包括设置背景色、显示图例、设置 Y 轴刻度、设置 X 轴刻度、设置数据点类型等。...

    windows 32位 vc++ 6.0 sp6补丁包

    《Windows 32位VC++ 6.0 SP6补丁包详解》 在软件开发领域,Microsoft Visual C++(简称VC++)是一款备受推崇的编程工具,尤其在早期的Windows系统中,它以其强大的功能和高效性占据了重要的地位。Windows 32位VC++ ...

    vc++6.0用户界面制作

    总结来说,学习VC++6.0的用户界面制作不仅是对MFC框架的理解,还包括对资源编辑器的掌握,控件的使用,以及消息处理机制。通过不断的实践和学习,开发者可以创造出功能强大、易于使用的Windows应用程序。

    VC++6.0 用户界面制作技术与应用实例

    总的来说,VC++6.0的用户界面制作技术涵盖了从基础控件到高级定制的各个方面,通过熟练掌握这些技术,开发者可以构建出功能丰富、用户体验良好的Windows应用程序。在实际项目中,结合具体需求和实例,可以进一步提升...

    vc++6.0使用串口控件例程知识.pdf

    VC++6.0 使用串口控件例程知识 VC++6.0 是一个功能强大且广泛使用的集成开发环境,串口控件是其中一个重要的控件。下面我们将详细介绍如何在 VC++6.0 中使用串口控件。 建立项目 首先,我们需要打开 VC++6.0 并...

    VC++ 6.0 Open Bug问题

    - 在 VC++ 6.0 中选择 “Tools” -&gt; “Customize”,然后转到 “Add-Ins and Macro Files” 标签页。 - 浏览并选中 `FileTool.dll` 文件,点击 “OK” 确认加载。 - 关闭并重新启动 VC++ 6.0,查看问题是否得到...

    C语言上机软件VC++6.0中文版安装_学习Visual_C++_6.0编程环境的使用借鉴.pdf

    "C语言上机软件VC++6.0中文版安装_学习Visual_C++_6.0编程环境的使用借鉴" 本文主要介绍了Visual C++ 6.0(简称VC)的安装和使用方法,并对VC的编程环境进行了详细的介绍。下面是从文中提取的相关知识点: 1. VC++...

    VC++6.0实现客户端与服务器端通讯

    本文将详细介绍如何使用VC++6.0这一强大的开发工具来实现客户端与服务器端之间的数据传输。 #### 客户端与服务器端通信的基本原理 客户端/服务器(Client/Server, C/S)模型是一种广泛应用于网络通信中的架构模式。...

Global site tag (gtag.js) - Google Analytics