其他语言

本类阅读TOP10

·基于Solaris 开发环境的整体构思
·使用AutoMake轻松生成Makefile
·BCB数据库图像保存技术
·GNU中的Makefile
·射频芯片nRF401天线设计的分析
·iframe 的自适应高度
·BCB之Socket通信
·软件企业如何实施CMM
·入门系列--OpenGL最简单的入门
·WIN95中日志钩子(JournalRecord Hook)的使用

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
如何完成任意结构在COM对象间传递

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

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

 

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




相关文章

相关软件