例如我用IDataObject实现一个数据对象,而IDataObject的GetData()方法中如何指定我想要的数据呢?你一定会说在cfFormat中指定你想要的格式,那你有没有看过CLIPFORMAT结构的定义?
那里只有少的可怜的几种数据格式,你一定又说,那么你可以用RegisterClipboardFormat 函数来注册你想要的格式,那么如果我在多进程,也就是说,数据对象和客户应用不在一个进程中,或者跨越机器边界,这时,这个函数注册的格式还有效吗?你在你的机器上注册 “MYFORMAT",和我在我的机器上注册"MYFORMAT"一样吗?我没有试过,但我想,不同的机器肯定是不一样的,在同一机器上是可能相同的。我需要传输的可能是一段内存数据,它算那种格式呢?CF_TEXT?所有已定义的格式没有我想要的,我该给这个格式定义成什么呢?因为它既不是文本,又不是位图,就是我程序中应用的一段数据?而我又需要在进程中交换它们。那么这个格式到底该怎么定义呢?抛弃格式的麻烦不说,姑且认为我们能选择一种合适的格式,那么如何告诉数据对象我想要什么数据呢?比如,我想获取指定的某一只股票的数据,那么我在哪里为它指定参数呢? 即使获得了,我有怎么能知道这个数据有多大呢?
这方面的资料真少,恳请高人指点迷经!有没有朋友能提供例子,或者链接?   

解决方案 »

  1.   

    为什么不用连接点呢?  
       IConnectionPoint
      

  2.   

       我也用过 IDataobject ,那是在1.00版的,特别麻烦!
       该用IConnectionPoint后,记行代码就搞定了。
      

  3.   

    通过IDataObject传输数据,实际上是通过剪贴板来完成数据的传输。所以你只需要注册一种你自己的格式,同一台机器上使用这种方法没有问题,但是如果你要在不同的机器上传送数据,建议你不要使用这种方法。其实你完全可以使用safearray来传送数据,这样无论你用什么格式,都可以通过SafeArrayAccessData来取得指针,然后,呵呵,你想怎么玩都可以了。
      

  4.   

    如果这样还满足不了你的要求,你完全可以定一个com对象,这个对象用于保存和访问数据,把这个对象列集过去,一切都ok了。
      

  5.   

    如果你一定要用剪贴版实现数据传送,你应注意实质上只能传送对象(静态数据)不要力图传送结构,因为有其它方法更合适,如共享内存,管道等
    远程控制剪贴版可以在2000/xp上实现,如果在其它平台上就要多费一些周折了c/s结构可以考虑每个客户端运行时都注册同样的格式
      

  6.   

    sandygull(菠萝菠萝密) 
    把对象列集过去???有没有搞错,你怎么列集???、
    只有接口才可以