能力值:
(RANK:1010 )
|
-
-
2 楼
这类错误一般不容易直接看出来,一般通过调试来解决
如果自己调试有困难的话可以把,可以把文件传上来,大伙来帮你调
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
代码我上传了,帮忙调试啊,谢谢了!!
|
能力值:
(RANK:410 )
|
-
-
4 楼
BOOL DlgProc (HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
int lowID;
switch (uMsg){
case WM_INITDIALOG:
LoadIcon( hInst , MAKEINTRESOURCE(10));
break;
case WM_COMMAND:
lowID=LOWORD(wParam);
if (lowID==1001)
LoadFile("a.exe");/*主要是你这一句出了问题,你在这个函数里取得的hMap在退函数之后已经被你在函数里面释放了,所以你下一句ShowFileHeaderInfo再使用被释放后的hMap自然会出现错误。*/
/* ShowFileHeaderInfo(hWnd);*/ /*将这一句注释掉就没问题了 */
break;
case WM_CLOSE:
EndDialog(hWnd,FALSE);
break;
default:
return FALSE;
}
return TRUE;
}
BOOL LoadFile(LPSTR pszFileName,HWND hWnd)
{
HANDLE hFile;
BOOL bSuccess=FALSE;
char buf[20];
hFile=CreateFile(pszFileName,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING ,FILE_ATTRIBUTE_ARCHIVE,0);
if(hFile!=INVALID_HANDLE_VALUE)
{
DWORD dwFileSize;
HANDLE hMapFile;
LPVOID lpMem;
stMapFile.hFile=hFile;
dwFileSize=GetFileSize(hFile,0);
hMapFile=CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL);
if(hMapFile)
{
stMapFile.hMapping =hMapFile;
lpMem=MapViewOfFile(hMapFile,FILE_MAP_READ,0,0,0);
if(lpMem)
{
if(IsPEFile(lpMem)==FALSE)
{
MessageBox(NULL,"不是PE格式的文件","info",MB_ICONINFORMATION|MB_OK);
}
else
{
stMapFile.ImageBase=(LPVOID)lpMem;
MessageBox(NULL,"是PE格式的文件","info",MB_ICONINFORMATION|MB_OK);
bSuccess=TRUE;
ShowFileHeaderInfo(hWnd);
}
UnmapViewOfFile(lpMem);
}
CloseHandle(hMapFile);
}
CloseHandle(hFile);
}
return bSuccess;
}
|
能力值:
(RANK:410 )
|
-
-
5 楼
如果你要其它地方再次使用hMap句柄,那么释放语句必须放在程序退出时再释放。不能放在LoadFile函数内。
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
谢谢斑竹,这个错误我我注释了,但还是不能在文本框里显示PE信息,该怎么办啊!
|
能力值:
( LV4,RANK:50 )
|
-
-
7 楼
我整好了,原来是函数声明时露调了一个参数
好郁闷,我好像每次都是错在粗心大意上
看来编程得 很 细心和需要很好的耐心的
|