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

类别:编程语言 点击:0 评论:0 推荐:

如何完成任意结构在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]定义

 

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

本文地址:http://com.8s8s.com/it/it29726.htm