仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1415|回复: 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-2-4 13:48:43 | 显示全部楼层
Java 编程语言的风格十分接近C、C++语言。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-16 07:25

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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