Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8230886
  • 博文数量: 1227
  • 博客积分: 10026
  • 博客等级: 上将
  • 技术积分: 20273
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-16 12:40
文章分类

全部博文(1227)

文章存档

2010年(1)

2008年(1226)

我的朋友

分类: C/C++

2008-04-23 21:57:10

控件如何传递自定义struct

作者:

一、开发工具
  我本来想用的是.ocx控件,最后发现,对于自定义struct,它似乎是无能为力(有谁知道.ocx可以的话请联系我)。最后采用的是vc 6.0中的ATL。下面给出了如何调用含自定义结构的组件函数senddata,ReceiveData。组件中的参数传递与下面的代码是一模一样的 ,这里不再重复。(该组件是应用于配电自动化中的,用以实现馈线自动化FA功能,本人自己设计开发)。

二、源码 这里介绍如何向控件传递自己的结构。调用组件函数的源代码如下:

int result;

VARIANT LineVal;

VARIANT DotVal;

SAFEARRAY FAR * pLSA = NULL;

SAFEARRAYBOUND dimension[1];

dimension[0].lLbound =0;

dimension[0].cElements = MAX*10;

pLSA = SafeArrayCreate( VT_BSTR,1,dimension );

Line FAR *pLineData=NULL;

::SafeArrayAccessData(pLSA,( void HUGEP* FAR*) &pLineData );

for (i=0;i=0有过流数据

	BOOL CutFlag;//跳闸标志

};



//在ATL的idl文件中需要声明如下:

typedef

[

uuid(D124B04A-C5F9-4a16-9671-1E67B75DB1A1),

helpstring("NetWork Node Struct")

]



struct Line

{

	long id;//id号

	BOOL Power;//有电标志

	BSTR LineName;//线路名称

	long StaPoint_x;//起点x

	long StaPoint_y;//起点y

	long EndPoint_x;//终点x

	long EndPoint_y;//终点y

	short EndType;//1 负荷 2 电源 0 其它

	long Longth;

	BOOL ShCirFlag;//短路标志

}Line;



typedef

[

uuid(D124B04A-C5F9-4a16-9671-1E67B75DB1A2),

helpstring("NetWork Node Struct")

]



struct Dot

{

	long id;

	BOOL Power;//开合标志

	BSTR DotName;//线路名称

	long StaPoint_x;//起点x

	long StaPoint_y;//起点y

	long EndPoint_x;//终点x

	long EndPoint_y;//终点y

	short DotType;//可操作标志0 断路器不可遥控 1 断路器可遥控 2 刀闸 3 线路节点 4 变压器

	short HighCurrent;//过流标志

	BOOL CutFlag;//跳闸标志

}Dot;



然后就可以随意使用这两种结构了。

三、结束语
  需要更多代码,请看例子源码.但是组件QFA2004的源码不能提供,请原谅。同时希望有更好办法的高手们提供更好的传递自定义struct的方法。源码使用方法:首先应注册QFA2004组件 。regsvr32 c:\qfa2004.dll(c:\目录根据qfa2004.dll的目录更改),然后用VC 6.0打开,编译。
邮箱:qfa2004@126.com

阅读(352) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~