如何完成任意结构在COM对象间传递

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

如何完成任意结构在COM对象间传递

-------------------------------

假设有结构

struct TS

{

....

};

TS ts;

步骤:

1.将结构转化为Variant变量

ts----->variant

int Size=sizeof(TS);

void *p=(void *)(&ts);//将ts强制转化为void指针

Variant a;

a=VarArrayCreate(OPENARRAY(char,(0,Size-1));//

char *ax = (char *) a.ArrayLock();

for(int i=0;i<Size;i++)

ax[i]=p[i];

a.ArrayUnlock();

2.将Variant变量转化为结构

Variant------->TS

int Size=Sizeof(TS)

char *ax=(char *)a.ArrayLock();

for(int i=0;i<Size;i++)

p[i]=ax[i];

ts=(TS *)p;

OK;

因此可以抽象出如下两个方法:

1、

void Struct2Variant(Variant *var,char *p,int Size)

{

file://Struct to Variant

*var=VarArrayCreate(OPENARRAY(char,(0,Size-1));

char *ax = (char *) var->ArrayLock();

for(int i=0;i<Size;i++)

ax[i]=p[i];

var->ArrayUnlock();

}

2、

void Variant2Struat(Variant *var,char *p,int Size)

{

file://Variant to Struct

char *ax = (char *) var->ArrayLock();

for(int i=0;i<Size;i++)

p[i]=ax[i];

var->ArrayUnlock();

}

以上两函数的用法示例

TMyStruct MyStruct;

Variant va;

Struct2Variant(&va,(char *)MyStruct,SizeOf(MyStruct));

SendToSvr(va);

在另外的Com中

STDMETHODIMP TadasdaImpl::SendToSvr(TVariantInParam va)

{

TMyStruct MyStruct;

Variant var=va;

Variant2Struat(&var,(char *)MyStruct,SizeOf(MyStruct));

现在MyStruct和客户端内容是一样的

}

注意,使用这种方法传递结构,结构内如有指针变量,则指针变量所

致内容无法传递,同时,如有字符串,不要使用AnsiString定义,使用

char MyStr[n]定义

第一次发表文章,可能读来拗口,您就迁就点吧

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航