分类: 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;