重金三百:IDataObject指针问题

netsky 2000-03-14 03:26:00
我最近在看有关IDataObject的东西,MSDN上的书也看了一点,但还很不清楚,
若有两个IDataObject指针,分别指示了一个数据对象,如何来判断这两个指针所指示的数据对象是否是同一个对象呢?我现在一点头绪都没有,还请各位大虾指教一二。
...全文
255 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
netsky 2000-05-01
  • 打赏
  • 举报
回复
很抱歉,现在才给分:(。谢谢各位。
softdoctor 2000-03-17
  • 打赏
  • 举报
回复
关注
mach 2000-03-17
  • 打赏
  • 举报
回复
to netsky:
要拷贝一份到另一个IDataObject,是可以用SetData,GetData的,只要FORMATETC中的dwAspect=DVASPECT_CONTENT就行了,当然如果IDataObject是你自己实现的,当dwAspect=DVASPECT_CONTENT时,你要负责向GetData提供所有数据,SetData写入所有数据.具体的例子inside ole中有,你可以看看msdn中的inside ole chaptor 10.
netsky 2000-03-16
  • 打赏
  • 举报
回复
mach的想法挺妙的,改变了一个,另一个不变则肯定是不同的。
但我有个想法,所有的接口都继承自IUnknow,一个组件只有唯一的一个IUnknow指针,
而每个组件应该都只有一个IDataObject接口吧,那据此可以拿到得到IUnknown指针来进行比较若相同则两指针也应该是相同的吧,
另外,我还有个地方不太懂,若有一个IDataObject对象指针,指向一个实际的对象,
那怎么样才能将该对象拷贝一份到另一个IDataObject对象指针,就是要构造一个新的IDataObject对象。不是简单的SetData,GetData就行的吧,不知道还要做什么。
(不考虑AddRef()Release()之类的)
有请mach及各路大狭。
SoftDIY 2000-03-16
  • 打赏
  • 举报
回复
CComPtr::IsEqualObject可能可以解决比较是否相同的问题
SoftDIY 2000-03-16
  • 打赏
  • 举报
回复
试试CComPtr::CopyTo
mach 2000-03-14
  • 打赏
  • 举报
回复
对了,有一个办法,如果该对象实现了SetData方法(判断是否实现该方法,只要SetData返回值不是E_NOT_IMPL就行了),SetData某个数据,然后用另一个IDataObject指针调用GetData(如果用了IAdviseSink,就不用显式的调用GetData了),看看数据是否发生变化就知道是否指向同一个对象了.
mach 2000-03-14
  • 打赏
  • 举报
回复
以上各位的方法都不行,如果IDataObject是由dll中的进程服务器返回的,或许还可以(也不是绝对的),否则经过masharlling后,得到的指针是指向proxy对象的,即使是同一个IDataObject两次QueryInterface得到指针也可能不同,但确实是指向同一个对象的.总之不能通过指针的值是否相同来判断是否是同一个对象的接口.
如果该IDataObject是由你自己实现的,可以在GetData时,若请求的数据数据格式为你定义的某种特殊格式,则返回自己的进程号和this指针,以次判断是否同一个对象,如果是辨认实现的IDataObject就没办法了.
ZPoint 2000-03-14
  • 打赏
  • 举报
回复
式式指针匹配,我没有试过!
IDataObject p1 = ...
IDataObject p2 = ...
p1.QueryInterface(REFIID iid1, void ** ppvObject1);
p2.QueryInterface(REFIID iid2, void ** ppvObject2);
if (*ppvObject1 == *ppvObject2)
{
...
}
Un1 2000-03-14
  • 打赏
  • 举报
回复
VB中有Is 操作符如:
If Obj1 Is Obj2 Then

对于VC我想应该是直接用
(pObj1 == pObj2) 判断就可以了吧?!
Jackzhu 2000-03-14
  • 打赏
  • 举报
回复
如果已经存在一个IDataObject实例,应该在建立IDataObject之前用QueryInterface查询是否已经存在实例

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧