ATL中存储Variant对象探讨。

superrg 2007-04-03 07:21:24
在ATL中实现了一个ICollection接口,其功能跟VB的Dictionary或Collection相类似。调用时都是用VB程序调用。现在的问题是:在其中保存数字或字符串,可以正常放入和取出。但在其中保存Variant对象时,当创建Variant的VB程序退出后,不能正常取出其中的Variant对象,会抛出异常。估计是VB的Variant对象被VB销毁了。

现在的问题是:有什么办法可以不让VB销毁对象,或在ATL中复制一份一模一样的Variant对象?
...全文
327 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fankun 2007-04-04
  • 打赏
  • 举报
回复
用type
……
end type来接收要传递的变量,然后在其他地方引用。
蒋晟 2007-04-04
  • 打赏
  • 举报
回复
1 在堆上创建(new)而不是在栈上声明变量
2 实现访问接口和引用计数
3 实现线程安全
superrg 2007-04-04
  • 打赏
  • 举报
回复
请问如何复制?
superrg 2007-04-04
  • 打赏
  • 举报
回复
感谢关注。经过两天的努力,终于没有实现,明天散分了。
蒋晟 2007-04-03
  • 打赏
  • 举报
回复
实现IDispatch并且加上线程安全的代码,使得在同一时间只有一个线程可能可以访问集合。
蒋晟 2007-04-03
  • 打赏
  • 举报
回复
把变量复制一份就可以了
superrg 2007-04-03
  • 打赏
  • 举报
回复
忘了说,变量传递是在不同的线程间进行的。
superrg 2007-04-03
  • 打赏
  • 举报
回复
支持的,
CathySun118 2007-04-03
  • 打赏
  • 举报
回复
Variant对象vc不支持吧
蒋晟 2007-04-03
  • 打赏
  • 举报
回复
msdn2.microsoft.com/en-us/library/ms891674.aspx -
superrg 2007-04-03
  • 打赏
  • 举报
回复
VC版的地址如下:
http://community.csdn.net/Expert/topic/5437/5437808.xml?temp=.8067743
superrg 2007-04-03
  • 打赏
  • 举报
回复
to fankun(虾虾《农夫三拳——哼哼哈嘿》):
如何转成结构体?

to jiangsheng(蒋晟.Net[MVP]):
线程的同步没有问题,现在关键的问题是:声明Variant变量的线程退出后,无法访问对变量的内容。
CathySun118 2007-04-03
  • 打赏
  • 举报
回复
lz,为何一定要传com对象呢,能不能换成别的方式
fankun 2007-04-03
  • 打赏
  • 举报
回复
把variant变量转为结构体可以吗
因文件超过20M不能上传,所以拆分为两个文件分次上传 第1章 COM背景知识 1.1 COM的起源 1.1.1 软件业面临的挑战 1.1.2 传统解决方案 1.1.3 面向对象程序设计方法 1.1.4 最终解决方案:组件软件 1.1.5 面向对象的组件模型——COM 1.2 COM的发展历程 1.2.1 COM以前的对象技术:DDE、OLE 1、VBX控件 1.2.2 COM首次亮相:OLE2 1.2.3 Microsoft拥抱Internet:ActiveX 1.2.4 更多的新名词:Windows DNA和COM+ 1.2.5 远程对象:ORBs和DCOM 1.2.6 COM的最新版本:COM+ 1.3 COM技术现状 1.3.1 COM与CORBA 1.3.2 COM与Enterprise Java Beans 1.3.3 Windows之外的COM 小结 第2章 从C++到COM 2.1 C++客户重用C++对象——例程DB 2.1.1 C++对象 2.1.2 客户程序 2.2 将C++对象移进DLL——例程DB_cppdll 2.2.1 成员函数的引出 2.2.2 内存分配 2.2.3 Unicode/ASCII兼容 2.2.4 例程实现 2.2.4.1 修改接口文件 2.2.4.2 修改对象程序 2.2.4.3 修改客户程序 2.3 C++对象使用抽象基类——例程DB_vtbl 2.3.1 问题:私有数据成员被暴露 2.3.2 解决方案:抽象基类 2.3.2.1 什么是抽象基类(Abstract Base Class) 2.3.2.2 实现秘诀:虚函数(Virtual Functions) 2.3.3 使用抽象基类 2.3.4 例程实现 2.3.4.1 修改接口文件 2.3.4.2 修改对象程序 2.3.4.3 修改客户程序 2.4 改由COM库装载C++对象——例程dbalmostcom 2.4.1 COM库 2.4.2 对象创建的标准入口点 2.4.3 标准对象创建API 2.4.4 标准对象注册 2.4.5 例程实现 2.4.5.1 修改接口文件 2.4.5.2 修改对象程序 2.4.5.3 修改客户程序 2.5 将C++对象变成COM对象 2.5.1 引用计数 2.5.2 多接口 2.5.3 IUnknown接口 2.5.4 标准类厂接口:IClassFactory 2.5.5 对象代码的动态卸载 2.5.6 自动注册 2.5.7 例程实现 2.5.7.1 修改接口文件 2.5.7.2 修改对象程序 2.5.7.3 修改客户程序 2.6 为COM对象添加多接口支持 2.6.1 多接口 2.6.2 DEFINE_GUID 2.6.3 例程实现 2.6.3.1 修改接口文件 2.6.3.2 修改对象程序 2.6.3.3 修改客户程序 小结 第3章 COM基础知识 3.1 对象与接口 3.1.1 COM对象 3.1.2 COM接口 3.1.3 IUnknown接口 3.1.3.1 生存期控制:AddRef和Release 3.1.3.2 接口查询:QueryInterface 3.1.4 全球唯一标识符GUID 3.1.5 COM接口定义 3.1.6 接口描述语言IDL 3.2 COM应用模型 3.2.1 客户/服务器模型 3.2.2 进程内组件 3.2.3 进程外组件 3.2.4 COM库 3.2.5 HRESULT返回值 3.2.6 COM与注册表 3.3 COM组件 3.3.1 实现类厂对象 3.3.2 类厂对象的创建 3.3.3 实现自动注册 3.3.4 实现自动卸载 3.4 COM客户 3.4.1 COM对象创建函数 3.4.1.1 CoGetClassObject 3.4.1.2 CoCreateInstance 3.4.1.3 CoCreateInstanceEx 3.4.2 如何调用进程内组件 3.4.3 COM客户调用进程外组件 3.5 进一步认识COM 3.5.1 可重用机制:包容和聚合 3.5.2 进程透明性 3.5.3 安全性机制 小结 第4章 COM扩展技术 4.1 可连接对象机制 4.1.1 客户、接收器与可连接对象 4.1.1.1 接收器 4.1.1.2 可连接对象 4.1.1.3 客户 4.1.2 实现可连接对象 4.1.3 实现接收器 4.1.4 建立接收器与连接点的连接 4.1.5 获得出接口的类型信息 4.2 结构化存储 4.2.1 什么叫结构化存储和复合文件 4.2.2 存储对象和IStorage接口 4.2.2.1 IStorage接口 4.2.2.2 获得IStorage指针 4.2.2.3 释放STATSTG内存 4.2.2.4 枚举存储对象的元

7,786

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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