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

关于Char* 转CString 有关问题

2013-07-08 
关于Char* 转CString 问题代码如下所示:void CMainDialog::OnQuery_Import_Table(){CString strCString t

关于Char* 转CString 问题
代码如下所示:
void CMainDialog::OnQuery_Import_Table()
{
CString str;
CString temp;

HMODULE hMod = ::GetModuleHandle(NULL);

IMAGE_DOS_HEADER* pDosHeader = (IMAGE_DOS_HEADER*)hMod;
IMAGE_OPTIONAL_HEADER * pOptHeader =
(IMAGE_OPTIONAL_HEADER *)((BYTE*)hMod + pDosHeader->e_lfanew + 24);

IMAGE_IMPORT_DESCRIPTOR* pImportDesc = (IMAGE_IMPORT_DESCRIPTOR*)
((BYTE*)hMod + pOptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);

while(pImportDesc->FirstThunk)
{
char* pszDllName = (char*)((BYTE*)hMod +pImportDesc->Name);

str = str + "模块名称:" + pszDllName + "\r\n";


// 一个IMAGE_THUNK_DATA就是一个双字,它指定了一个导入函数
IMAGE_THUNK_DATA* pThunk = (IMAGE_THUNK_DATA*)
((BYTE*)hMod + pImportDesc->OriginalFirstThunk);
int n = 0;
while(pThunk->u1.Function)
{
// 取得函数名称。hint/name表前两个字节是函数的序号,后4个字节是函数名称字符串地址
char* pszFunName = (char*)
((BYTE*)hMod + (DWORD)pThunk->u1.AddressOfData + 2);
// 取得函数地址。IAT表就是一个DWORD类型的数组,每个成员记录一个函数的地址
PDWORD lpAddr = (DWORD*)((BYTE*)hMod + pImportDesc->FirstThunk) + n;

// 打印出函数名称和地址



temp.Format("从此模块导入的函数:%-25s,", pszFunName")
str = str + temp;


                        temp.Format("函数地址:%x\r\n",lpAddr);
str = str + temp;

n++; pThunk++;
}

pImportDesc++;
}
GetDlgItem(IDC_EDIT_IMPORT_TABLE)->SetWindowText(str);

}


其中temp.Format("从此模块导入的函数:%-25s,", pszFunName")无法通过编译,请教问题出在哪里?

[解决办法]
多了个引号....
[解决办法]
感觉是内存越界了~ 在那两行加断点调试看看吧

热点排行