- 浏览: 979142 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
用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组件自动 给新注册用户发出确认信函,用最快的方式让用户去确认并使注册成功……其实,你一定还有很多新的想法可以在网页上得以实现,赶快行动吧。
发表评论
-
NotePad++ - 安装和配置C/C++开发插件
2011-11-15 23:00 1751NotePad++ - 安装和配置C/C+ ... -
VC中使用ATL编写控件 【转】
2011-10-21 15:23 2098VC中使用ATL编写控件 作者:邵盛松 2010 ... -
在Windows环境下MongoDB搭建和简单操作【转】
2011-10-21 12:37 929一,安装mongoDB 1,解 ... -
Mongodb在Windows下安装及配置【转】
2011-10-21 12:35 5441.下载mongodb的windows版本,有32位和64位版 ... -
一篇介绍VC开发OCX的文章[转]
2011-10-20 17:57 1809转自“http://www.cnblogs.com/genga ... -
使你的ActiveX控件执行时不弹出安全性提示 (转载)
2011-10-20 17:56 1156使你的ActiveX控件执行时不弹出安全性提示 2010-0 ... -
VC++ 的MFC 和ATL 及COM 是什么?
2011-10-20 01:12 980一、什么是MFC 微软基础类(Micro ... -
使用ATL编写一个简单的COM服务器【转】
2011-10-20 01:10 857下载例子代码 本文的对象是COM编程 ... -
基于CentOS 5.4搭建nginx+php+spawn-fcgi+mysql
2011-09-01 13:49 1506基于CentOS 5.4搭建nginx+php+sp ... -
解决mrtg的Use of uninitialized value in hash element at /usr/bin/indexmaker line 35
2011-09-01 13:41 2296mrtg的安装过程这里就不再阐述,随便搜索一下。使用ind ... -
用MRTG检测Linux网络性能
2011-09-01 10:49 864随着Linux应用的日益广泛,有大量的网络服务器使用Linux ... -
Linux安装配置maven3.0以及搭建nexus私服
2011-08-30 23:45 1615一、软件准备 1、apache-maven-3.0-b ... -
GraphicsMagick介绍及安装
2011-08-30 23:16 1527作者:Cocowool 来源:博客园 发布时 ... -
Makefile
2011-08-30 22:10 861CC = g++ CFLAG = -Wall -g -w ... -
高位字节优先 低位字节优先
2011-08-24 17:30 1154自第一台计算机诞生, ... -
C++方式的文件操作
2011-08-24 16:05 1809本文主要讨论C++标准I/O库,主要内容为控制台输入输出流 ... -
【JAVA实用工具】JNA-通过它调用C++的方法,比JNI方便很多访问网站需要代理,所以把它COPY出来备忘
2011-08-24 00:33 3089How To Get Started Using JN ... -
Jni中C++和Java的参数传递
2011-08-24 00:04 5111如何使用JNI的一些基本方法和过程在网上多如牛毛,如果你对 ... -
aaaaa
2011-08-24 00:04 986如何使用JNI的一些基本方法和过程在网上多如牛毛,如果你对 ... -
jbytearray转c++byte数组
2011-08-24 00:02 1353jbyte * arrayBody = env->G ...
相关推荐
图解VC++6.0中使用mscomm串口控件,可以实现单片机和计算机之间进行通讯
使用VC++6.0,编写的MFC程序,实现正弦曲线的绘制,包括横纵坐标轴的绘制。
使用vc++6.0实现base64编码图片数据转图片,也可是图片直接使用base64编码返回数据,源码和成果。
VC++6.0常用控件使用方法简单介绍
图析VC++6.0中使用mscomm串口控件
BMP转换成JPG vc++6.0 实现 源代码 工程
vc++6.0下开发的仓库管理系统,采用ADO操作数据库,使用数据库为ACCE-vc 6.0's warehouse management system using ADO operational database, using the database to ACCE
vc++6.0使用串口控件例程知识.pdf
VC++6.0实现客户端与服务器端通讯 学习VC++的好例子
VC++6.0写ActiveX控件,和WEB通信的一些心得
VC++6.0使用方法(精品简约).doc VC++6.0使用方法(精品简约).doc VC++6.0使用方法(精品简约).doc VC++6.0使用方法(精品简约).doc VC++6.0使用方法(精品简约).doc VC++6.0使用方法(精品简约).doc VC++6.0使用方法(精品...
VC++6.0简体中文版本,支持win7提示兼容问题忽略就行。 此前装过别的版本,但win...vC++6.0精简中文版版,Win7兼容,安全无毒,适合学习使用。 注册csdn就有积分送,简单快捷,安全放心,快来下载吧!下载后评论返积分!
VC++6.0绿色版,Win764位下可以正常运行,解决安装之苦。
[005]vc++6.0使用串口控件例程.zip上位机开发VC串口学习资料源码下载[005]vc++6.0使用串口控件例程.zip上位机开发VC串口学习资料源码下载[005]vc++6.0使用串口控件例程.zip上位机开发VC串口学习资料源码下载[005]...
可以在win7上使用的VC++6.0,包含英文版
编者 求是科技 王正军 《VC++6.0从入门到精通》源码,
提供VC++6.0仅供使用提供VC++6.0仅供使用提供VC++6.0仅供使用提供VC++6.0仅供使用
目的:利用VC++6.0在医疗设备及卫生装备的管理及应用软件中实现客户端与服务器端之间的通讯。方法:利用VC++6.0的异步非阻塞Socket封装类CAsyncSocket及线程,在客户端和服务器端进行数据转换后的发送和接受。结果:实现...
vc++6.0基于MsComm控件的串口通讯方法非常适合于初学者
免费vc++6.0安装包程序(majin)免费vc++6.0安装包程序(majin)免费vc++6.0安装包程序(majin)免费vc++6.0安装包程序(majin)免费vc++6.0安装包程序(majin)免费vc++6.0安装包程序(majin)免费vc++6.0安装包...