汇编转VC,希望能帮忙。
#include <Windows.h>
//#include "create_index.h"
struct INDEX_DESC
{
DWORDm_dwIndex;
INDEX_DESC*m_pNext;
};
#defineINDEX_DESC_SIZE8
class CIndexCreator
{
public: /*加*/
INDEX_DESC*m_pIndexList;
INDEX_DESC*m_pBaseDesc;
INDEX_DESC**m_ppIndexDescTable;
DWORDm_dwIndexNum;
DWORDm_dwMaxIndexNum;
public:
BOOLInitialize(DWORD dwMaxNum);
DWORDGetIndexNum(){return m_dwIndexNum;}
CIndexCreator();
~CIndexCreator();
};
void InitializeIndexDesc(void* pEntry,DWORD dwNum);
CIndexCreator::CIndexCreator()
{
memset(this,0,sizeof(CIndexCreator));
}
BOOL CIndexCreator::Initialize(DWORD dwMaxNum)
{
m_dwMaxIndexNum = dwMaxNum;
m_pIndexList = new INDEX_DESC[m_dwMaxIndexNum];
InitializeIndexDesc(m_pIndexList,m_dwMaxIndexNum);
m_pBaseDesc = m_pIndexList;
m_ppIndexDescTable = new INDEX_DESC*[m_dwMaxIndexNum];
memset(m_ppIndexDescTable,0,sizeof(INDEX_DESC*)*m_dwMaxIndexNum);
m_dwMaxIndexNum--;
return TRUE;
}
DWORD NewICAllocIndex(CIndexCreator* pIC) //DWORD __declspec(naked) NewICAllocIndex(CIndexCreator* pIC)
{
DWORD dwIndex = 0;
if (pIC->m_pBaseDesc)
{
dwIndex = pIC->m_pBaseDesc->m_dwIndex;
pIC->m_pBaseDesc = pIC->m_pBaseDesc->m_pNext;
pIC->m_ppIndexDescTable[dwIndex] = pIC->m_pBaseDesc;
pIC->m_dwIndexNum++;
}
return dwIndex;
}
void __declspec(naked) NewICFreeIndex(CIndexCreator* pIC,DWORD dwIndex)
{
if (pIC->m_ppIndexDescTable[dwIndex])
{
INDEX_DESC* pDesc = pIC->m_ppIndexDescTable[dwIndex];
pIC->m_ppIndexDescTable[dwIndex] = NULL;
pDesc->m_pNext = pIC->m_pBaseDesc;
pIC->m_pBaseDesc = pDesc;
}
}
CIndexCreator::~CIndexCreator()
{
if (m_pIndexList)
{
delete [] m_pIndexList;
m_pIndexList = NULL;
}
if (m_ppIndexDescTable)
{
delete [] m_ppIndexDescTable;
m_ppIndexDescTable = NULL;
}
}
void InitializeIndexDesc(void* pEntry,DWORD dwNum)//void __declspec(naked) InitializeIndexDesc(void* pEntry,DWORD dwNum)
{
INDEX_DESC* pDesc = (INDEX_DESC*)pEntry;
DWORDm_dwIndex;
for (m_dwIndex = 0; m_dwIndex < dwNum; m_dwIndex++)
{
pDesc->m_dwIndex = m_dwIndex;
pDesc->m_pNext = pDesc + 1;
pDesc++;
}
}