中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > ATL/COM/ActiveX
《深入解析ATL》学习手札--第一天(ATL#1)
作者:hujun614 时间:2001-10-03 09:53 出处:互联网 责编:chinaitpower
              摘要:《深入解析ATL》学习手札--第一天(ATL#1)

  COM是Windows操作系统的基本软件模型,从1993年建立以来,为Windows平台的发展做出了不可磨灭的贡献,而且自身还在不断发展。
  对于一个在Windows下开发应用软件的程序员来说,学习COM有多么重要,为了能够深入的学习COM技术,特从书店买回一本潘爱民译的《深入解释ATL》一书,希望能在这本书的指引下,一步一步进入ATL开发COM组件的殿堂。


  今天是学习《深入解释ATL》第一天,只看了一下译序、原序、前言,就深受鼓舞,心里暗暗下定决心,一定要学好ATL。


  先动手做个例子吧,照着书依样画瓢,建立了一个有一个属性和一个方法的求PI的ATL组件,编译,呀差个函数,NineDigitsOfPiStartingAt,自已写吧,看看书后,网上有源码,拖一个下来,把相关代码拷到自已的程序中,大功告成,编译通过。


  在VB中来试一下吧,在Project菜单中的Component中把我的求PI组件加进来,用以下代码
Dim spi As Object
Dim str1 As String
Set spi = CreateObject("Pisvr.CalcPi")
spi.Digits = CInt(Text1.Text)
spi.CalcPi(str1)
MsgBox str1
怎么spi.CalcPi(str1),请教了一下先学者,原来对于HRESULT CalcPi([out,retval]BSTR* pbstrPi);应该用str1 = spi.CalcPi来得到结果。在ATL中应该用*pbstrPi = SysAllocString(strbuf);来返回一段BSTR指向的内存空间,由调用的程序在使用后进行释放。不过又有一个疑问,ATL可以运行在COM客户的同一进程中,那么分配的内存当然与客户的内存在同一进程空间,SysAllocString分配的内存可以直接被客户使用和释放,但ATL可以与客户在不同的进程空间呀,ATL的设计者会怎样解决这些呢,现在刚开始,这样的问题以后再思考吧。


  管理它呢,先编译成Release版吧。怎么,不行,换UNICODE,还是不行,怎么办呢。Debug都可以呀,问问高手吧。Oh my god!,ATL的BUG,气死我了。在Project Setting的C/C++属性页的Preprocessor definitions选项中去掉最后一个,终于通过了。


  第一天,就到这里吧。希望能在CSDN的鼓励下好好学完这本书。



 


 

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有