仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1345|回复: 20
打印 上一主题 下一主题

[学习教程] JAVA网页设计COM 组件计划与使用(六)用 ATL 写第一个组件仓酷云

[复制链接]
只想知道 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:37:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
关于第二点:俺问问你,如果是企业级项目的话,诸如RMI,EJB,等一些关键技术,这些难道都不需要学么?如果光是使用jsp,servlet,javabean的话。下载源代码

1、媒介


  1、与《COM组件计划与使用(五)》的内容基础分歧。但本回解说的是在vc.net2003下的利用办法,即便你不再利用vc6.0,也请和上一回的内容,参照比对。
  2、这第一个组件,除一切COM组件必需的IUnknown接口外,我们再完成一个本人界说的接口IFun,它有两个函数:Add()完成两个数值的加法,Cat()完成两个字符串的毗连。
  3、上面......好难听讲!入手下手了:-)
 
2、创建ATL工程

  步骤2.1:创建一个办理计划。
  步骤2.2:在该办理计划中,新建一个vc++的ATL项目。示例程序叫Simple2,并选择DLL体例,见、图二。


<br>
、新建ATL项目


<br>
、选择非属性化的DLL组件范例

  属性化属性化编程,是将来的偏向,但我们如今先不要选它。
  静态链接库(DLL)选择它。
  可实行文件(EXE)今后再讲。
  服务(EXE)暗示创建一个体系服务组件程序,体系启动后就会加载并实行的程序。
  同意兼并代办署理/存根(stub)代码选择该项暗示把“代办署理/存根”代码兼并到组件程序中,不然必要独自编译,独自注册代办署理存根程序。代办署理/存根,这个是甚么观点?还记得我们在上回书中先容的吗?当挪用者挪用历程外或远程组件功效的时分,实际上是代办署理/存根卖力数据互换的。关于代办署理/存根的详细酿成和操纵,今后再说啦......
  撑持MFC除非有特别的缘故原由,我们写ATL程序,最好不要选择该项。你大概会说,假如没有MFC的撑持,那CString怎样办呀?告知你个奥密吧,常人我都不告知他,我后半辈子就靠着这个奥密在世了:
  1、你会STL吗?能够用STL中的string取代;
  2、本人写个MyString类,嘿嘿;
  3、悄然地、奥密地、不要告知他人(出格是别告知微软),把MFC中的CString源码拿过去用;
  4、利用CComBSTR类,最少也能简化我们字符串操纵;
  5、间接用API操纵字符串,归正我们人人进修C言语的时分,都是从这里干起的。(即是没说,呵呵)
  撑持COM+1.0撑持事件处置的COM+功效。COM+大概在第99回先容吧。


3、增加ATL对象类

  步骤3.1:菜单"项目增加类..."(大概用鼠标右键在项目中弹出菜单"增加增加类...")并选择ATL复杂对象。见图三。


<br>
、选择创建ATL复杂对象

  除复杂对象(只完成了IUnknown接口),还能够选择“ATL控件”(ActiveX,完成了10多个接口)......能够选择的组件对象范例良多,但实质上,就是让导游帮我们默许加上一些接口。在今后的文章中,连续先容吧。

  步骤3.2:增添自界说类CFun(接口IFun),见图四。


<br>
、填写称号

  实在,我们只必要输出简称,别的的项目会主动填写。没甚么多说的,只请人人注重一下ProgID项,默许的ProgID机关体例为“项目名.简称名”。

  步骤3.3:填写接口属性选项,见图五。


<br>
、接口选项

  线程模子COM中的线程,我以为是最厌恶,最庞大的部分。COM线程和公寓的观点,留待后续先容。如今吗......人人都选"单位"(Apartment),它代表甚么那?复杂地说:当在线程中挪用组件函数的时分,这些挪用会列队举行。因而,这类形式下,我们能够临时不必思索同步的成绩。(注1)
  接口。两重(Dual),这个十分十分主要,十分十分经常使用,但我们明天不讲(注2)。牢记!牢记!我们的这第一个COM程序中,必定要选择“自界说”!!!!(假如你选错了,请删除全体内容,从头来过。)
  聚合我们写的组件,未来是不是同意被他人聚合(注3)利用。“只能创立为聚合”,有点相似C++中的纯虚类,你如果总工程师,只卖力计划但不亲身写代码的话,才选择它。
  ISupportErrorInfo是不是撑持丰厚信息的毛病处置接口。今后就讲。
  毗连是不是撑持毗连点接口(事务、回调)。今后就讲。
  IObjectWithSite是不是撑持IE的挪用


4、增加接口函数


<br>
、修改增添接口办法的菜单


<br>
、增添接口函数Add

  请依照图示的办法,增添Add()函数,增添Cat()函数。[in]暗示参数偏向是输出;[out]暗示参数偏向是输入;[out,retval]暗示参数偏向是输入,同时能够作为函数运算了局的前往值。一个函数中,能够有多个[in]、[out],但[retval]只能有一个,而且要和[out]组合后在最初一个地位。(注4)


<br>
、接口函数界说完成后的图示

  我们都晓得,要想改动C++中的类函数,必要修正两个中央:一是头文件(.h)中类的函数声明,二是函数体(.cpp)文件的完成处。而我们如今用ATL写组件程序,则还要修正一个中央,就是接口界说(IDL)文件。别发急IDL下次就要会商啦。


5、完成接口函数

  鼠标双点图八中CFun基项和接口Add(...)就能够入手下手输出函数完成了:
  1. STDMETHODIMPCFun::Add(longn1,longn2,long*pVal){*pVal=n1+n2;returnS_OK;}
复制代码
这个太复杂了,不再华侈“口条”。上面我们完成字符串联接的Cat()函数:
  1. STDMETHODIMPCFun::Cat(BSTRs1,BSTRs2,BSTR*pVal){intnLen1=::SysStringLen(s1);        //s1的字符长度intnLen2=::SysStringLen(s2);        //s2的字符长度*pVal=::SysAllocStringLen(s1,nLen1+nLen2);//机关新的BSTR同时把s1先保留出来if(nLen2){::memcpy(*pVal+nLen1,s2,nLen2*sizeof(WCHAR));        //然后把s2再毗连出来//wcscat(*pVal,s2);}returnS_OK;}
复制代码
先生:下面的函数完成,完整是挪用基础的API体例完成的。
先生:是的,说假话,切实其实对照啰嗦。
先生:我们是用memcpy()完成毗连第二个字符串功效的,那末为何不必函数wcscat()那?
先生:多半情形下能够,但你必要晓得:因为BSTR包括有字符串长度,因而实践的BSTR字符串内容中是能够存储L""""的,而函数wcscat()是以L""""作为复制停止标记,因而大概会丧失数据。分明了吗?
先生:分明,分明。我看过《COM组件计划与使用(三)之数据范例》后就分明了。那末先生,有无复杂一些的办法那?
先生:有呀,你看......
  1. STDMETHODIMPCFun::Cat(BSTRs1,BSTRs2,BSTR*pVal){CComBSTRsResult(s1);sResult.AppendBSTR(s2);*pVal=sResult.Copy();//        *pVal=sResult.Detach();returnS_OK;}
复制代码
先生:哈哈,好!利用了CComBSTR,这个就复杂多了。CComBSTR::Copy()和CComBSTR::Detach()有甚么区分?
先生:CComBSTR::Copy()会打造一个BSTR的正本,别的CComBSTR::CopyTo()也有相似功效。而CComBSTR::Detach()是使对象与外部的BSTR指针剥离,这个函数因为没有复制历程,因而速率略微快一点点。但要注重,一但剥离后,就不克不及再利用该对象啦。
先生:先生,您讲的太牛啦,我对您的仰慕如巍巍泰山,直进云霄......
先生:STOP,STOP!留功课啦......
  1、本人先依照明天讲的内容写出这个组件;
  2、不论你懂不懂,必定要往察看IDL文件,CPP文件;
  3、编译后,看都发生了些甚么文件?假如是文本的文件,就翻开看看;
  4、下载本文的示例程序(vc.net2003版本)编译运转,看看效果。然后预习一下示例程序中的挪用办法;
先生:晓得啦,快下课吧,我要上茅厕,我都憋的不可了......
先生:下课!别忘了顶我的帖子呀......


6、小结

  本回先容第一个ATL组件程序的创建步骤,而怎样利用该组件,敬请存眷《COM组件计划与使用(七)》。注1:Apartment,体系经由过程埋没的窗口动静来列队组件挪用,因而我们能够临时不思索同步成绩。注重,是临时哈。
注2:双接口暗示在一个接口中,同时撑持自界说接口和IDispatch接口。今后,今后,今后就讲。由于双接口十分主要,我们今后会每天讲、夜夜讲、经常讲------简称“三讲”:)
注3:组件的重用办法有2个,聚合和包涵。
注4:这些都是IDL文件中的观点,今后用到甚么,就先容甚么。
原文链接:http://www.vckbase.com/document/viewdoc/?id=1498

但是一些大型开发或者是保密型比较高的项目都会用java,原因有2点,一:java是开源的,不怕别人留后门,偷我工具,.net网页编程就不一样了,保持微软的一向风格,源代码不公开
小女巫 该用户已被删除
沙发
发表于 2015-1-21 11:10:49 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
若相依 该用户已被删除
板凳
发表于 2015-1-25 16:03:24 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
再见西城 该用户已被删除
地板
发表于 2015-1-25 16:20:27 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
变相怪杰 该用户已被删除
5#
发表于 2015-1-26 10:45:37 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
只想知道 该用户已被删除
6#
 楼主| 发表于 2015-2-4 13:48:43 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
分手快乐 该用户已被删除
7#
发表于 2015-2-5 23:34:20 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
小妖女 该用户已被删除
8#
发表于 2015-2-14 05:20:45 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
活着的死人 该用户已被删除
9#
发表于 2015-3-4 04:52:32 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
10#
发表于 2015-3-8 18:49:20 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
深爱那片海 该用户已被删除
11#
发表于 2015-3-11 06:03:53 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
admin 该用户已被删除
12#
发表于 2015-3-15 07:37:26 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
谁可相欹 该用户已被删除
13#
发表于 2015-3-21 20:49:33 | 只看该作者
是一种为 Internet发展的计算机语言
因胸联盟 该用户已被删除
14#
发表于 2015-3-23 01:16:11 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
再现理想 该用户已被删除
15#
发表于 2015-4-10 23:27:50 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
爱飞 该用户已被删除
16#
发表于 2015-4-13 10:52:35 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
飘灵儿 该用户已被删除
17#
发表于 2015-4-14 15:19:06 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
愤怒的大鸟 该用户已被删除
18#
发表于 2015-5-2 01:16:11 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
金色的骷髅 该用户已被删除
19#
发表于 2015-6-4 01:55:36 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
简单生活 该用户已被删除
20#
发表于 2015-6-15 08:20:57 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-2 07:48

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表