当前位置:首页 > 多媒体相关

向ATL的DLL中传递C++对象参数



热门问答:
  • 烦了几天的内部窗体问题 [详细内容]
  • ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ [详细内容]
  • 如何在存储过程中创建零时表? [详细内容]
  • ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ [详细内容]
  • ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ [详细内容]

  • 推荐阅读
      · 炎炎夏日护机心得 解决手机受潮失灵
        摘要:如果有朋友的手机掉水里了,大家千万不要着急。其实手机落水可以有急救的方法:首先卸下电池,不要在潮湿的情况下开机,否则会造成手机元件的损坏。赶快把手机拿到手机维修商那采取急救。手机受潮后集成电路块等元器绝缘下降。手机运行中的适宜温度一般在零摄氏度到35摄氏度之间,相对温度在40到60摄氏度为好。平时手机不可放在潮湿和阳光直射的地方,特别是手机电池不可置放高温高热处,否则极易引发电池爆炸和蒸汽等潮湿水汽渗入手机。在温差较大的场所不要将手机裸露在外,使......
      · 宇瞻便携式数码相片刻录器「cp200随身烧」
        摘要:  致力于数码存储的应用与服务,以及以优异的性价比与终身质保闻名的宇瞻科技,针对数码影像应用的日渐频繁,以创新及卓越的研发技术,推出荣获今年「台湾地区精品奖」与「产品形象金质奖」的便携式数码相片刻录器「cp200随身烧」,可让数码相机使用者随时随地轻松地将数码照片由记忆卡复制到光盘中,是数码照片存储与分享的最佳工具       致力于数码存储的应用与服务,以及以优异的性价比与终身质保闻名的宇瞻科技,针对数码影像应用的日渐频繁,以......

    正文
      简介

      几个星期以前,我拼命的寻找一个能够通过com接口传递c++对象的例子,但是,没有找到.这就是我发表这篇文章的原因。

      向atl的dll中传递一个c++对象参数并不是非常之难,但是,当然也会有点难度,也很有趣。

      在开始一个工程以前,首先你得确信客户机和服务器组件都是适应c++的程序,其次,你必须知道怎样设置你的客户机和服务器。

      接口的局限性

      com技术要求客户机和服务器高度的分离,这是通过接口实现的,但是问题出在:接口的方法中只提供了有限个参数数据类型,如果这个接口是基于idispatch的,参数类型的可选范围就更加受到限制了,由于这些局限性,c++对象只有在满足以下条件时才能够传递:

      1、客户机和服务器都是由vc++编写。
      2、它们必须共享对象的定义(比如 头文件)。
      3、传递应用程序设计的简单的对象。
      4、你的应用程序可能需要运行在一个分布式环境下。你希望com的远程活动,本地/远程活动是透明的,安全的。

      我建议,在开始工作之前,先顺序的看一下各个标题,现在,我列出实例,并作以下事情:

      1、创建一个atl dll服务器,
      2、添加一个mfc类,从cobject类派生,
      3、在类的头部使用 declare_serial 宏,
      4、在类的中间使用 implement_seri 宏,
      5、覆盖serialize() 方法, // 你的 csimpleobj 类应该像这样:


      现在,下一步就是用一个carchive对象来进行序列化和反序列化(载入和存储对象),我用了一个叫cblob的新类来实现的:


      在这里 ,我使用safearray是因为它对我们来说是最好的选择,它可以包含一些复杂的多维数组,但是,这个例子我们只使用了非常简单的数组,safearray数据,有一个问题:midl认不出这个数据类型,在下一篇文章中我将讲述最简单的方法:使用 variant数据类型。

    讨论区

    Login