kms писал(а) 27. Февраля 2008 :: 09:01: void CGCBoost::RefreshGroupContextData(CGroupContext* pGroupContext)
...
delete [] m_pMyVTable;
Человек, который ВЫШИБАЕТ VTBL изо ВСЕХ активных контекстов - НЕ ДОЛЖЕН браться за такие вещи, как TurboBL.
Это не ошибка, это отсутствие понимания того, что ты делаешь.
И если логика отсутствует как класс, никакие тесты здесь не помогут.
С таким уровнем, Артур, я не считаю, что тебе стоит заниматься чем-то, кроме прикладных классов, от которых ничего не зависит.
Смотрим и этот пункт
Мой код
delete [] m_pMyVTable;
m_pMyVTable = NULL;
SGCInfo* pContextInfo = reinterpret_cast<SGCInfo*>(pGroupContext->m_FlagAutoDestroy);
// TODO возможен лик при выделении виртуальной таблицы
Boost(pMod, optimize);
// п. 1
Далее в CGCBoost::Boost написано
BOOL CGCBoost::Boost(CBLModule7 *pMod, BOOL optimize)
{
....
if(!m_pMyVTable)
{
//m_pRealVTable=*(DWORD**)pCont;
m_pRealVTable = addrVTable;
CGCBoost* pBoost=new CGCBoost;
DWORD* pMyVTable=*(DWORD**)pBoost;
delete pBoost;
m_pMyVTable=new DWORD[64]; // TODO лик ?
memcpy(m_pMyVTable,m_pRealVTable,256);
m_pMyVTable[18]=pMyVTable[18]; // GetNProps artbear
m_pMyVTable[19]=pMyVTable[19]; // FindProp
m_pMyVTable[20]=pMyVTable[20]; // GetPropName artbear
m_pMyVTable[21]=pMyVTable[21]; // GetPropVal
m_pMyVTable[22]=pMyVTable[22]; // SetPropVal
m_pMyVTable[23]=pMyVTable[23]; // IsPropReadable
m_pMyVTable[24]=pMyVTable[24]; // IsPropWritable
m_pMyVTable[25]=pMyVTable[25]; // GetNMethods artbear
m_pMyVTable[26]=pMyVTable[26]; // FindMethod
m_pMyVTable[27]=pMyVTable[27]; // GetMethodName artbear
m_pMyVTable[28]=pMyVTable[28]; // GetNParams
m_pMyVTable[29]=pMyVTable[29]; // GetParamDefValue
m_pMyVTable[30]=pMyVTable[30]; // HasRetVal
m_pMyVTable[31]=pMyVTable[31]; // CallAsProc
m_pMyVTable[32]=pMyVTable[32]; // CallAsProc
}
....
}
Этот код тебе ни о чем не говорит, а?
Я как раз этот участок кода хорошо проработал, в отличие от тебя, самого умного программиста.
Т.е. этот код выполняется непрерывно, и в до попадания в п.1 подмененная виртуальная таблица для группового контекста просто не нужна, т.к. вызовы виртуальных методов этих контекстов не выполняются.
Если ты не понимаешь логику чьей-то работы, это не говорит о том, что этой логики нет на самом деле.