如何完成任意结构在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]定义
第一次发表文章,可能读来拗口,您就迁就点吧 
|