如何把自定义结构的数据存储到COleVariant中呢

xcs99321 2010-07-21 08:31:13
如题
...全文
154 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
iqyely 2010-07-21
  • 打赏
  • 举报
回复
恩恩,来学习下了。
雪影 2010-07-21
  • 打赏
  • 举报
回复
不行~~
xcs99321 2010-07-21
  • 打赏
  • 举报
回复
struct tagVARIANT
{
union
{
struct __tagVARIANT
{
VARTYPE vt;
WORD wReserved1;
WORD wReserved2;
WORD wReserved3;
...
}
保留字wReserved1,wReserved2,wReserved3
雪影 2010-07-21
  • 打赏
  • 举报
回复
1:使用VARIANT的保留字
什么保留字?
2:第一个变量为自己类型名,
没有必要

不知道有没有更好的办法呢
除此之外,没有其他办法,纯win32 api封装更麻烦
xcs99321 2010-07-21
  • 打赏
  • 举报
回复
有高手在,我顺便多问一句:
有没有方法我标识一下这个COleVariant里面不是普通的一维数组呢,还是我一个我自定义数据结构呢
我突然想到两种办法
1:使用VARIANT的保留字

2:第一个变量为自己类型名,
class CComplex
{
public:
double Re;
double Im;
};
//cp=12+34i
CComplex cp;
cp.Re=12;
cp.Im=34;

COleSafeArray arr;
DWORD numElements[] = {3};
arr.Create(VT_VARIANT, 1, numElements);
long index = 0;
arr.PutElement(&index,COleVariant(“CComplex”));
index = 1;
arr.PutElement(&index,COleVariant(cp.Re));
index = 2;
arr.PutElement(&index,COleVariant(cp.Im));


//将数组的值复给COleVariant对象
COleVariant var(arr.Detach());

不知道有没有更好的办法呢
雪影 2010-07-21
  • 打赏
  • 举报
回复
class CComplex
{
public:
double Re;
double Im;
};
//cp=12+34i
CComplex cp;
cp.Re=12;
cp.Im=34;

COleSafeArray arr;
DWORD numElements[] = {2};
arr.Create(VT_VARIANT, 1, numElements);
long index = 0;
arr.PutElement(&index,COleVariant(cp.Re));
index = 1;
arr.PutElement(&index,COleVariant(cp.Im));


//将数组的值复给COleVariant对象
COleVariant var(arr.Detach());
xcs99321 2010-07-21
  • 打赏
  • 举报
回复
感谢所有回帖的,哈哈
xcs99321 2010-07-21
  • 打赏
  • 举报
回复
感谢tttyd
O了,结贴!
雪影 2010-07-21
  • 打赏
  • 举报
回复
首先构造一个COleSafeArray对象成员,将结构体中的数据成员逐个封装为COleVariant对象然后插入COleSafeArray对象成员中

最后将COleSafeArray的对象赋值给COleVariant对象
xcs99321 2010-07-21
  • 打赏
  • 举报
回复
简单的说吧,我现在有一个复数类
class CComplex
{
public:
double Re;
double Im;
};
//cp=12+34i
CComplex cp;
cp.Re=12;
cp.Im=34;

由于提供给用户接口中,一个复数只对应一个统一个到COleVariant,需要把cp存储到COleVariant中,且保证CComplex信息完整性,支持串行化等,不知道COleVariant即VARIANT类型有没有机制支持自定义类型?
雪影 2010-07-21
  • 打赏
  • 举报
回复
例如
struct  ST
{
int a;
long b;
float c;
char* psz;
}
=>
ST A;
COleVariant m1(ST.a);
COleVariant m2(ST.b);
COleVariant m3(ST.c);
COleVariant m4(ST.psz);
COleSafeArray arr;
DWORD numElements[] = {4};
arr.Create(VT_VARIANT, 1, numElements);
long index = 0;
arr.PutElement(&index,m1);
index = 1;
arr.PutElement(&index,m2);
index = 2;
arr.PutElement(&index,m3);
index = 3;
arr.PutElement(&index,psz);

//将数组的值复给COleVariant对象
COleVariant var(arr.Detach());
xcs99321 2010-07-21
  • 打赏
  • 举报
回复
我的需求是需要把数据所有信息储存到COleVariant中,光存储指针不能满足我的需要
teleinfor 2010-07-21
  • 打赏
  • 举报
回复

COleVariant Members
Construction

COleVariant

Constructs a COleVariant object.

Operations
Attach

Attaches a VARIANT to a COleVariant.

ChangeType

Changes the variant type of this COleVariant object.

Clear

Clears this COleVariant object.

Detach

Detaches a VARIANT from a COleVariant and returns the VARIANT.

GetByteArrayFromVariantArray

Retrieves a byte array from an existing variant array.

SetString

Sets the string to a particular type, typically ANSI.

Operators
operator =

Copies a COleVariant value.

operator ==

Compares two COleVariant values.

operator LPCVARIANT

Converts a COleVariant value into an LPCVARIANT.

operator LPVARIANT

Converts a COleVariant object into an LPVARIANT.

Archive/Dump
operator <<

Outputs a COleVariant value to CArchive or CDumpContext.

operator >>

Inputs a COleVariant object from CArchive.
teleinfor 2010-07-21
  • 打赏
  • 举报
回复
自定的数据结构采用指针方式保存到COleVariant不就行了。
这么多构造函数,必有一款适合你!

COleVariant::COleVariant
Constructs a COleVariant object.

COleVariant( );
COleVariant(
const VARIANT& varSrc
);
COleVariant(
const COleVariant& varSrc
);
COleVariant(
LPCVARIANT pSrc
);
COleVariant(
LPCTSTR lpszSrc
);
COleVariant(
LPCTSTR lpszSrc,
VARTYPE vtSrc
);
COleVariant(
CString& strSrc
);
COleVariant(
BYTE nSrc
);
COleVariant(
short nSrc,
VARTYPE vtSrc = VT_I2
);
COleVariant(
long lSrc,
VARTYPE vtSrc = VT_I4
);
COleVariant(
const COleCurrency& curSrc
);
COleVariant(
float fltSrc
);
COleVariant(
double dblSrc
);
COleVariant(
const COleDateTime& timeSrc
);
COleVariant(
const CByteArray& arrSrc
);
COleVariant(
const CLongBinary& lbSrc
);
COleVariant(
LPCITEMIDLIST pidl
);

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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