📄 pdb.cpp
字号:
#include "stdafx.h"
#include "PDB.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
typedef union uctLongTag {
struct {
BYTE Byte4;
BYTE Byte3;
BYTE Byte2;
BYTE Byte1;
} bytValues;
long value;
} uctLong, *lpuctLong;
typedef union uctULongTag {
struct {
BYTE Byte4;
BYTE Byte3;
BYTE Byte2;
BYTE Byte1;
} bytValues;
unsigned long value;
} uctULong, *lpuctULong;
typedef union uctIntTag {
struct {
BYTE Byte2;
BYTE Byte1;
} bytValues;
short value;
} uctInt, *lpuctInt;
typedef union uctUIntTag {
struct {
BYTE Byte2;
BYTE Byte1;
} bytValues;
unsigned short value;
} uctUInt, *lpuctUInt;
int GetInt(CFile& filInput)
{
uctInt intTemp;
filInput.Read(&intTemp.bytValues.Byte1, 1);
filInput.Read(&intTemp.bytValues.Byte2, 1);
return intTemp.value;
}
unsigned int GetUInt(CFile& filInput)
{
uctUInt intTemp;
filInput.Read(&intTemp.bytValues.Byte1, 1);
filInput.Read(&intTemp.bytValues.Byte2, 1);
return intTemp.value;
}
long GetLong(CFile& filInput)
{
uctLong lngTemp;
filInput.Read(&lngTemp.bytValues.Byte1, 1);
filInput.Read(&lngTemp.bytValues.Byte2, 1);
filInput.Read(&lngTemp.bytValues.Byte3, 1);
filInput.Read(&lngTemp.bytValues.Byte4, 1);
return lngTemp.value;
}
unsigned long GetULong(CFile& filInput)
{
uctULong lngTemp;
filInput.Read(&lngTemp.bytValues.Byte1, 1);
filInput.Read(&lngTemp.bytValues.Byte2, 1);
filInput.Read(&lngTemp.bytValues.Byte3, 1);
filInput.Read(&lngTemp.bytValues.Byte4, 1);
return lngTemp.value;
}
CString GetString(CFile& filInput, long lngSize)
{
CString strTemp;
long i;
char chrTemp;
BOOL bolDone;
strTemp = "";
if (lngSize > 0) {
bolDone = FALSE;
for (i = 0 ; i < lngSize; i++) {
filInput.Read(&chrTemp, 1);
if (chrTemp == '\0')
bolDone = TRUE;
else if (! bolDone)
strTemp += chrTemp;
}
}
else {
filInput.Read(&chrTemp, 1);
while (chrTemp != '\0') {
strTemp += chrTemp;
filInput.Read(&chrTemp, 1);
}
}
return strTemp;
}
void GetHeader(CFile& filInput, pdbHeader* puctHeader)
{
filInput.SeekToBegin();
puctHeader->strName = GetString(filInput, 32);
puctHeader->intAttr = GetInt(filInput);
puctHeader->intVers = GetInt(filInput);
puctHeader->lngCreate = GetLong(filInput);
puctHeader->lngMod = GetLong(filInput);
puctHeader->lngBackUp = GetLong(filInput);
puctHeader->lngModNum = GetLong(filInput);
puctHeader->lngAppInfoArea = GetLong(filInput);
puctHeader->lngSortArea = GetLong(filInput);
puctHeader->strType = GetString(filInput, 4);
puctHeader->strCreator = GetString(filInput, 4);
puctHeader->lngSeed = GetLong(filInput);
puctHeader->lngNextRec = GetLong(filInput);
puctHeader->intNumRecs = GetInt(filInput);
}
void GetRecInfo(CFile& filInput, pdbRecInfo* puctRecInfo)
{
uctULong lngTemp;
puctRecInfo->lngOffset = GetLong(filInput);
filInput.Read(&puctRecInfo->bytAttr, 1);
lngTemp.bytValues.Byte4 = 0;
filInput.Read(&lngTemp.bytValues.Byte1, 1);
filInput.Read(&lngTemp.bytValues.Byte2, 1);
filInput.Read(&lngTemp.bytValues.Byte3, 1);
puctRecInfo->lngUniqueID = lngTemp.value;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -