首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

ACTIVEX属性 ,怎么处理能每个不同实例有不同的值

2012-01-09 
ACTIVEX属性 ,怎么办能每个不同实例有不同的值下面是我的代码,我作个ACTIVEX后, 有多个ACTIVEX实例 ,设m_N

ACTIVEX属性 ,怎么办能每个不同实例有不同的值
下面是我的代码,我作个ACTIVEX后, 有多个ACTIVEX实例 ,
设m_NodeValue值为不同时 如 ACTIVEX实例1 m_NodeValue="1" ACTIVEX实例2 m_NodeValue="2"
下次加载这个实例后发现,所有的ACTIVEX实例的m_NodeValue值变成一样的了(ACTIVEX实例1 m_NodeValue="2" ACTIVEX实例2 
m_NodeValue="2"),为什么?怎么解决?

public:
CString m_NodeValue;//结点值

BEGIN_DISPATCH_MAP(CNodeCtrl, COleControl)  
DISP_PROPERTY_EX(CNodeCtrl, "NodeValue", GetNodeValue, SetNodeValue, VT_BSTR) 
DISP_STOCKPROP_READYSTATE()
END_DISPATCH_MAP()


BSTR CNodeCtrl::GetNodeValue() 
{
return m_NodeValue.AllocSysString(); ;
}
void CNodeCtrl::SetNodeValue(LPCTSTR lpszNewNodeValue)
{
m_NodeValue.Format(_T("%s"), lpszNewNodeValue); 
SetModifiedFlag();
InvalidateControl(); 

void CNodeCtrl::Serialize(CArchive& ar)
{
if (ar.IsStoring())

ar << m_NodeValue;
}
else

ar >> m_NodeValue;
}
}

[解决办法]
COM本身使用引用计数维护生存期的。你的需求最好使用其他维护状态的变量。

class A()
{
public:
int m_NodeValue;
}

HANDLE CNodeCtrl::CreateA()
{
A * pA = new A;
return (HANDLE)pA;
}

void CNodeCtrl::SetNodeValue(HANDLE hA, LPCTSTR lpszNewNodeValue)
{
A * pA = (A *)hA;
pA->m_NodeValue.Format(_T("%s"), lpszNewNodeValue); 
SetModifiedFlag();
InvalidateControl(); 


BSTR CNodeCtrl::GetNodeValue(HANDLE hA) 
{
A * pA = (A *)hA;
return pA->m_NodeValue.AllocSysString(); ;
}

热点排行