ciao .
Ho messo in ordine le idee.
ho la seguente funzione:
[code]
HRESULT STDMETHODCALLTYPE SAXStore::endElement(
wchar_t __RPC_FAR *pwchNamespaceUri,
int cchNamespaceUri,
wchar_t __RPC_FAR *pwchLocalName,
int cchLocalName,
wchar_t __RPC_FAR *pwchRawName,
int cchRawName)
{
std::wstring localName(pwchLocalName);
CBaseIfc** pEntityc = m_mapRegistredRef[L"i45"];
CBaseIfc** pOldIfc = NULL;
if(StackIfc.size()>0)
pOldIfc = &StackIfc.top();
//se il precedente elemento nella coda è un id e il corrente un ref
//li leggotutti e due in modo da riferire il ref ,figlio del padre
if(StackIfc.size()>1)
{
StackIfc.pop();
}//carica i dati fino al tag di chiusura, se sono ne tag di chiusura getdata ritorna false
if(StackIfc.size()!= 0){
if(! StackIfc.top()->GetData(localName, m_strCurrStr, m_nPos, pOldIfc))
{
wstring id = StackIfc.top()->getID();
wstring ref = StackIfc.top()->getRef();
//è una classe con id appena terminata(sono nell endtag),notifico
if(id.compare(L"unknown") != 0 && id.compare(L"") != 0)
{
CBaseIfc** pEntity = m_mapRegistredRef[id];
if(pEntity)
{
CWallStandardCaseIfc * w = (CWallStandardCaseIfc*) *pOldIfc;
*pEntity = w;
CWallStandardCaseIfc * f = m_GraphicsElements->getWalls(0);
int i = 0;
}
}
else
{
/**/
}
if(StackIfc.size()>0)
StackIfc.pop();
}
else
{
if(pOldIfc)
{
wstring id = (*pOldIfc)->getID();
wstring ref = (*pOldIfc)->getRef();
if(ref.compare(L"unknown") != 0 && ref.compare(L"") != 0)
if(ref.compare(L"i45")== 0){
m_mapRegistredRef[ref] = pOldIfc;//qui setto il valore //v.commenti dopo
}
}
}
}
m_strCurrStr = L"";
return S_OK;
}
[code]
allora
m_mapRegistredRef è un map<wstring, CBaseIfc**>m_mapRegistredRef;
pOldIfc è un CBaseIfc** con il primo indirizzo xxxxx e il secondo(quello a cui punta il primo):yyyyy
metto questo pOldIfc nella mappa con key ="i45".
quando estraggo il puntatore a puntatore dalla mappa con m_mapRegistredRef["i45"] il primo puntatore : xxxxx è corretto , mentre il secondo è diverso (anche se molto poco , non so se serve questo commento) yyyyy è infatti leggermente diverso.
yyyyy è l'indirizzo a una variabile membro publica della classe cwall.
in pratica lo vorrei usare tipo un puntatore a funzione , andando a memorizzare l'indirizzo della variabile membro pubblica in una mappa per poi tirarlo fuori e cambiare il valore della variabile membro a un altro puntatore.
come mai questo puntatore cambia?
è due gg che ci sono su.
CIao .