⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 phymemdumpdlg.cpp

📁 Windows下Hardware直接读写
💻 CPP
字号:
// PhyMemDumpDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "HW_sigal.h"
#include "PhyMemDumpDlg.h"
#include ".\phymemdumpdlg.h"
#include ".\HwReadWrite.h"


// CPhyMemDumpDlg 对话框

IMPLEMENT_DYNAMIC(CPhyMemDumpDlg, CDialog)
CPhyMemDumpDlg::CPhyMemDumpDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CPhyMemDumpDlg::IDD, pParent)
	, m_strPhyMemAddr(_T(""))
	, m_strSize(_T(""))
	, m_pReadBuffer(NULL)
{
}

CPhyMemDumpDlg::~CPhyMemDumpDlg()
{
}

void CPhyMemDumpDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_EDIT_PHY_ADDRESS, m_strPhyMemAddr);
	DDX_Text(pDX, IDC_EDIT_MEM_SIZE, m_strSize);
	DDX_Control(pDX, IDC_LIST_MEM_DUMP, c_listMemVal);
}


BEGIN_MESSAGE_MAP(CPhyMemDumpDlg, CDialog)
	ON_WM_SHOWWINDOW()
	ON_BN_CLICKED(IDC_BUTTON_MEM_DUMP, OnBnClickedButtonMemDump)
END_MESSAGE_MAP()


// CPhyMemDumpDlg 消息处理程序

void CPhyMemDumpDlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
	CDialog::OnShowWindow(bShow, nStatus);

	// TODO: 在此处添加消息处理程序代码
	// Set full row selection
	ListView_SetExtendedListViewStyleEx(c_listMemVal.GetSafeHwnd(), LVS_EX_FULLROWSELECT , LVS_EX_FULLROWSELECT);

	CRect rect;
	this->c_listMemVal.GetClientRect(&rect);
	int nInterval = rect.Width()/6;
	this->c_listMemVal.InsertColumn(0, _T("Address"), LVCFMT_LEFT, nInterval);
	this->c_listMemVal.InsertColumn(1, _T("Values(Hex)"), LVCFMT_LEFT, nInterval*3);
	this->c_listMemVal.InsertColumn(2, _T("ASIIC(Text)"), LVCFMT_LEFT, rect.Width()-2*nInterval); 

}

void CPhyMemDumpDlg::OnBnClickedButtonMemDump()
{
	// TODO: 在此添加控件通知处理程序代码
	PBYTE phyAddress;
	WORD mapSize;
	//char* pReadBuff = NULL;
	this->UpdateData(TRUE);

	phyAddress = (PBYTE)_tcstoul(this->m_strPhyMemAddr, 0, 16);
	mapSize = (WORD)_tcstoul(this->m_strSize, 0, 16);
	
	if(m_pReadBuffer)
	{
		delete [] m_pReadBuffer;
	}
	if(mapSize > 0x10000)
	{
		MessageBox("Error Parameter");
		return;
	}
	else
	{
		m_pReadBuffer = new BYTE[mapSize];
	}
	gpHwRw->GetMemoryData(phyAddress, mapSize, m_pReadBuffer);

	ShowMemoryData(phyAddress, mapSize, m_pReadBuffer);
	
}

int CPhyMemDumpDlg::ShowMemoryData(PBYTE baseAddress, unsigned long rSize, PBYTE pBuffer)
{
	LV_ITEM lvi;
	TCHAR szItem[256];
	lvi.mask = LVIF_TEXT;
	for(int i=0; i < (int)rSize/16; i++)
	{
		
		// First item
		lvi.iItem = i;
		lvi.iSubItem = 0;
		_stprintf(szItem, _T("%08x"), baseAddress+i*16);
		lvi.pszText = szItem;
		c_listMemVal.InsertItem(&lvi);

		// SubItem 1
		lvi.iSubItem = 1;
		for(int offset = 0 ; offset < 16; offset++)
		{
			for(int j=0; j<2; j++)
			{
				_stprintf(szItem+offset*2+j, _T("%01x"), (pBuffer[i*16 + offset]>>((1-j)*4))&0x0F );
			}
		}

		CString strTemp = CString(szItem);
		strTemp.MakeUpper();

		lvi.pszText = strTemp.GetBuffer();
		c_listMemVal.SetItem(&lvi);

		// SubItem 2
		lvi.iSubItem = 2;
		for(int offset=0; offset < 16; offset++)
		{
			if(pBuffer[i*16 + offset]>31 && pBuffer[i*16 + offset] != 127)
			{
				sprintf(szItem+offset, _T("%c"), pBuffer[i*16 + offset]);
			}
			else
			{
				szItem[offset] = '.';
			}
		}
		szItem[16] = 0;
		lvi.pszText = _T(szItem);
		c_listMemVal.SetItem(&lvi);
	}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -