文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发数据结构通过COM传送对象
精品推荐
特别推荐
·网游外挂编写完全攻略
·开发WDM型的USB设备驱动程序
·数据库设计范式深入浅出
·理解软件保护技术之序列号方式
·大型网站必鉴:分销渠道的结构
·你的代码真的很健壮吗
·利用HOOK拦截封包原理
·四种网络游戏外挂的设计方法
·程序语言效率比较
·五子棋算法
·正则表达式从入门到精通
·SQL Server不能启动的常见故障
·Windows应用程序设计的基本术语
·软件本地化与汉化
·Windows中断编程
·windows nt 4.0中文版的开机过程
热点TOP10
·网游外挂编写完全攻略
·兵之利器 软件开发辅助工具纵览
·开发WDM型的USB设备驱动程序
·DCOM揭秘之六
·VS2008 第一次安装心得及使用
·游戏外挂设计技术探讨
·《数据结构》试题下载2004
·饺子馆的物流故事之二——供应链视角下的缺货及品类管理
·代码静态分析工具PC-LINT安装配置
·使用BHO定制你的IE浏览器
·原始套接字透析之Raw Socket基础
·基于CS模式的Winsock网络通讯程序
·程序语言效率比较
·《Windows程序设计》读书笔记之六
·四种网络游戏外挂的设计方法
·用CVSNT与WINCVS实现CVS的架设
·利用HOOK拦截封包原理
·简单对象访问协议(SOAP)初级指南
·带你全面了解数据库应用系统的开发步骤
·UML业务建模实例分析

通过COM传送对象

日期:2007年5月3日 作者: 查看:[大字体 中字体 小字体]



  首先我们来看一下服务器的GetArray方法。这个COM方法创建一个简单的对象,并将它送回给客户端。COM方法的本身挺简单,但它使用了一个颇复杂的称为CBlob的类。我将所有的串行化和安全数组代码放在CBlob类中。

  file:// This method creates an object and sends it back to the client.

  STDMETHODIMP CBlobData::GetArray(SAFEARRAY **pData)

   {

    // create object to send to server

    CSimpleObj *pMyOb = new CSimpleObj();

    // set the string data

    pMyOb->SetString( "A SAFEARRAY from the server!" );

    // create blob to serialize object

    CBlob blob;

    // load the object into the blob

    *pData = blob.Load( pMyOb );

    // delete the object

    delete pMyOb;

    return S_OK;
   }

  GetArray方法首先创建一个CSimpleObject对象。然后将它传送给CBlob的Load()方法。Load方法将会串行化该对象,然后将它放进一个安全数组中。这个方法返回一个指向该安全数组的指针,此指针会被发送回客户端。该方法负责繁琐的串行化处理。

  // Extract data from a CObject and use it to create a SAFEARRAY.

  SAFEARRAY* CBlob::Load( CObject *pObj)

   {

    CMemFile memfile; // memory file

    // define the flag which tells archive if it should load or store

    long lMode = CArchive::store CArchive::bNoFlushOnDelete;

    file:// create the archive using the memory file

    CArchive ar(&memfile, lMode );

    file:// m_pDocument is not used

    ar.m_pDocument = NULL;

    // serialize the object into the archive

    ar.WriteObject(pObj);

    // close the archive - the data is now stored in memfile

    ar.Close();

    // get the length (bytes) of the memory file

    long llen = memfile.GetLength();

    file:// detach the buffer and close the file

    unsigned char *pMemData = memfile.Detach();

    file:// set up safearray - SAFEARRAY is defined OAIDL.H

    SAFEARRAY *psa;

    // create a safe array to store the stream data

    psa = SafeArrayCreateVector( VT_UI1, 0, llen );

    // pointer to byte array

    unsigned char *pData = NULL;

    // get a pointer to the safe array. Locks the array.

    SafeArrayAccessData( psa, (void**)&pData );

    // copy the memory file into the safearray

    memcpy( pData, pMemData, llen );

    // clean up buffer

    delete pMemData;

    // unlock access to safearray

    SafeArrayUnaccessData(psa);

    // return a pointer to a SAFEARRAY allocated here

    return psa;

   }

   以下就是Load方法所做的事情。你应该可以认出大部分的代码,因为我们已经讨论过它。

   1、创建一个准备用作存储的archive

   2、使用archive串行化该对象到一个CMemFile中

   3、存储CMemFile缓冲的长度

   4、将数据缓冲由CMemFile中脱离

   5、创建SAFEARRAY

   6、拷贝数据缓冲到SAFEARRAY

  该存储文件缓冲被串行化填充。一旦填好,该缓冲就会从CMemFile对象脱离。CMemFile的Detach()方法必须被执行,以访问一个指针,该指针指向包含有串行化对象的内存缓冲。Detach还会令内存缓冲由CMemFile脱离,并且关闭该文件。

  我们可以使用该指针做一个简单的内存复制,该操作将内存复制到SAFEARRAY的数据缓冲中。

  // copy the memory file into the safearray

  memcpy( pData, pMemData, llen );

  该个步骤看来比想象中复杂。其实,这是由于memcpy()函数仅能复制连续的数据,因此我们不能将对象直接拷贝到安全数组中--这个对象在内存中的存储并不是连续的。CMemFile缓冲可确保是连续的,因此我们可以使用memcpy(),这样数据可通过COM被发送到客户端,并在那里被还原(反串行化)。
[1] [2] 下一页 




上一篇:理解软件保护技术之序列号方式

下一篇:网络游戏通讯模型初探

通过COM传送对象 相关文章:
·教你通过路由器控制上网
·通过Java认证 SCJP 考试之精辟总结
·通过AWARD BIOS识别主板型号
·通过QQ临时会话与任何陌生人聊天
·linux下通过脚本实现自动重启程序
·通过JCA实现企业级应用程序的“即插即用”
·网管必读 黑客通过什么方式入侵网吧
·通过分析SQL语句的执行计划优化SQL(二)
·通过Remoting service上传文件
·通过宽带ADSL路由多机共享上网
通过COM传送对象 相关软件:
·UML面向对象建模技术 csf 视频教程
·深度探索C++对象模型
·内置对象实现超酷日历
·网络传送带(Net Transport)V2.51 Build 383
·北大“面向对象程序设计”上机考试题
·如何通过Win98建立拨号网络连接
·用面向对象方法与C++语言描述
·Visual C++面向对象与开发手册
·通过阅读学词汇-CET6[文本下载]
·AS系列·相册传送带V1.1

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:viphot