http://communitycsdnnet/Expert/topic/4874/4874384xml?temp=988537本贴加分
描述:
由于本人一次最多只能出100分,所以再开一贴感谢各位大虾。问题真得很急。。。在线急等!
解决方案1:
对IDispatch 接口的实现 LPDispatch 属性:
http://www.itcomputer.com.cn/Programs/VC/COM/200512/10656.html
//自定义结构体
typedef struct tagSNAPENVIRONMENT
{
CString str;
int data;
}SNAPENVIRONMENT, FAR* LPSNAPENVIRONMENT;
//---------------------------------------
//传送自定义结构体
//---------------------------------------
//自定义结构体变量
SNAPENVIRONMENT *pSnapEnvi;
SAFEARRAY FAR *pSafeArray = NULL;
//SAFEARRAY(我也不知道该怎么翻译这个东西自己可以查查MSDN)范围声明
//表示这个SAFEARRAY只能最多存放32个,当然可以改变它的大小让它存的更多
SAFEARRAYBOUND dimension[1];
dimension[0].cElements = 32;
dimension[0].lLbound = 0;
//创建SAFEARRAY
pSafeArray = SafeArrayCreate( VT_BSTR, 1, dimension );
//---------------------------------
//准备读取数据,将你要的自定义结构的数据按如下方式写入,必须这样写入
//---------------------------------
::SafeArrayAccessData( pSafeArray, (void HUGEP* FAR*)&pSnapEnvi );
for ( long i=0; i<32; i++ )
{
CString str;
str.Format("%d", i);
pSnapEnvi[ i].str = str;
pSnapEnvi[ i].data = i;
}
//---------------------------------
//写入结束保存
//---------------------------------
::SafeArrayUnaccessData( pSafeArray );
VARIANT val;
val.vt = VT_ARRAY;
val.parray = pSafeArray;
//这样你就可以给你的控件添加这样一个VARIANT属性下面是怎么取到VARIANT中的数据
//----------------------------------------
//接收自定义结构体,也是就是把VARIANT数据类型转换成你所想要的结构体
//---------------------------------------
SAFEARRAYBOUND dimension[1];
SAFEARRAY FAR *pSafeArray = NULL;
dimension[0].cElements = 32;
dimension[0].lLbound = 0;
pSafeArray = SafeArrayCreate( VT_BSTR, 1, dimension );
pSafeArray = val.parray;
//自定义结构体变量
SNAPENVIRONMENT *pSnapEnvi;
//读取自定义结构体数据
::SafeArrayAccessData( pSafeArray, ( void HUGEP* FAR* )&pSnapEnvi );
::SafeArrayUnaccessData( pSafeArray );
http://www.vckbase.com/document/viewdoc/?id=1159
http://www.vckbase.com/document/viewdoc/?id=1506
说了你不能直接传递你自定义的数据类型(类)
你只能通过VARIANT 来间接传递。
你在为控件定义属性的时候选择VARIANT类型,然后对VARIANT类型进行封装。
你能把你的那个类的定义给我看看吗?
如果你的类也有方法,那就要把类写成接口,如果只是传递简单数据就可以直接进行封装。
我要看了你的类 才知道具体怎么封装。