• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 用VC写的asp组件相对于VB有什么优势吗?

用VC写的asp组件相对于VB有什么优势吗?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了vc2008 x86 组件,vc组件,vc2008 x86 组件下载,vc组件包,vc 组件下载等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 用VC写的asp组件相对于VB有什么优势吗?
描述:

RT,谢谢


解决方案1:

用vc++写ASP组件也就是用MFC写控件或者ATL写组建通过网页调用的说法应该是一致的!I think so!!

解决方案2:

回楼上:这是编译优势。C++比VB更接近汇编,编译要优化会容易得多。用ATL写比用MFC写,耗的资源还会更小。

解决方案3:

我感觉一般没有什么区别[除非比较复杂],只不过大小有点区别.
☆ 使用VC++6.0制作ASP服务器控件简介 ☆
 
  作者:富 
   用ASP写网页的程序员,一定对VBSript语句“Set C /> tion’)”非常熟悉。该语句是利用ASP的Server对象创建了一个数据库控件,它提供了一系列
的方法和属性,可以帮助我们在ASP中方便的实现数据库的操作。类似的,在Visual InteDev
6.0中,我们还可以看到一
些ASP的内置组件如“Scripting.FileSystemObject”。但是,在有的场合,仅利用这些是不
够的或
复杂的,而且ASP的Script语言远不如C++语言功能强大(如建立链表,B+树结构等),这就
使我们想到,是否可以在开发网页时使用具有良好数据结构的C++语言。虽然CGI,ISAPI等都可
谓是用C/C++开
发网页的先驱,但我们知道CGI,ISAPI的开发周期很长,且不与网页结合,直观性差,编写、
调试困难;而在稳定性上,由于ISAPI是动态链接的方式,因此在执行若出现问题,会使得We
b服务器一起瘫痪。而ASP正好能补足这些缺点。 
由此可见,如果能学会编写ASP组件就能结合ASP的长处编写出强大的网页。可惜的是,笔者
在市面上很少看到有专门讲如何用VC++来制作ASP组件的书籍。一般VC书籍只讲一些写Window
s窗口程序或再加上
编写普通的动态链接库。而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],然后可跟上如in
t* 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*>(&pIRe
quest)); 
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来实现,因为每次调用都是一次新的链接,无法在网页之间仍然是同一次调用D
LL,所以设置成
员变量意义不大,只在一次调用中有用。而那两种方法都只能传递很有限的字符,除非利用
创建服务
器端临时文件(此方法很不好)。再说,ASP中的Session对象本身就是很好的存储信息的对
象。 
至此,我们创建了一个非常简单的没有什么功能的ASP组件,意在说明如何制作。下面,我们
书写一个
简单的ASP网页,来看看如何使用。网页如下: 
<%@ Language=VBScript %> 
<HTML> 
<HEAD> 
<META NAME="GENERATOR" C /> </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组件自动给新注册用户发出确认信函,用最
快的方式
让用户去确认并使注册成功……其实,你一定还有很多

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • VC下做了一个COM组件,在C#下怎么用啊
  • 我现在想在vc下编写一个组件,然后在html中调用!
  • 怎么使用VC开发COM组件
  • 急:VC中如何调用Delphi写的COM组件呢
  • 在未安装VC的机器上注册组件
  • VC同时操作word和excel,导入COM组件接口时候应该如何选择导入类???
  • VC中利用MSMAPI32OCX组件编写邮件时遇到问题
  • VC调用远程COM+组件
  • 利用VC调用COM组件的方式调用神经网络
  • 关于VC2008的ATL创建的服务方式的进程外组件的权限问题

相关文章

  • 2017-06-04 QQ图文发送方式?可否将OCX控件当作OLE对象插入CRichEditCtrl?ADO如何读取XML中的记录集?寻求技术高人请进
  • 2017-06-04 控件中的无模式对话框上的Edit框问题!
  • 2017-06-05 如何在同一个网页中,通过一个activex控件,调用或者控制另一个activex控件
  • 2017-06-05 请教大侠:DLL的中函数的参数类型。
  • 2017-06-04 难题,动态加载控件技术,请教高手!!!
  • 2017-06-05 求高手指点,如何得到对话框中activex控件的对象
  • 2017-06-05 为什么com的变量不能调用初始化com的函数,连最基本的setcommport都没有,报错classCMSCommhasnomembersetcomm
  • 2017-06-04 请问怎样才能获得当前线程的窗口句柄。。谢谢。
  • 2017-06-04 DLL使用ADO关闭程序时弹出内存错误[是析构函数问题吗]
  • 2017-06-05 请问如何获取每个进程的具体路径?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 请问atl是不是过时了
    • 急VC怎么没有ActiveXFrom的东东啊
    • 新建线程参数传递问题
    • 程序检测到被钩住,怎么卸掉这个钩子?
    • 使用第三方com遇到的问题
    • CComVariant类型转换的问题
    • 使用DirectShow播放视频定位播放时候偶尔出现卡死问题
    • 初学者的问题--comdll服务器如何在客户程序中使用?
    • 请问…………
    • 使我棘手1天1夜的线程问题,请高手指点

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有