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

📄 edsdoc.cpp

📁 VC读取用XML描述的文件,该文件是用来记录设备参数的,程序将文件读取后并显示出设备机构
💻 CPP
字号:
// EdsDoc.cpp :  CEdsDoc 类的实现
//

#include "stdafx.h"
#include "EdsChecker.h"

#include "EdsDoc.h"
#include ".\edsdoc.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


#include "EdsView.h"

const char VDataType[8][MAX_LEN] = {
									"nByte",
									"nChar",
									"nWord",
									"nShort",
									"nDWord",
									"nInt",
									"nFlaot",
									"nDouble"
								    };
const char VDataIO[2][MAX_LEN] = {"Input","Output"};


// CEdsDoc

IMPLEMENT_DYNCREATE(CEdsDoc, CDocument)

BEGIN_MESSAGE_MAP(CEdsDoc, CDocument)
END_MESSAGE_MAP()


// CEdsDoc 构造/析构

CEdsDoc::CEdsDoc()
{
	// TODO: 在此添加一次性构造代码
	m_parrNode = new CArray<NODEINFO,NODEINFO&>;

}

CEdsDoc::~CEdsDoc()
{
}

// CEdsDoc 序列化

void CEdsDoc::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
		// TODO: 在此添加存储代码
	}
	else
	{
		// TODO: 在此添加加载代码
	}
}


// CEdsDoc 诊断

#ifdef _DEBUG
void CEdsDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CEdsDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG


// CEdsDoc 命令

//BOOL CEdsDoc::OnOpenDocument(LPCTSTR lpszPathName)
//{
//	
//}


BOOL CEdsDoc::OnNewDocument()
{
	// TODO: 在此添加专用代码和/或调用基类

	return CDocument::OnNewDocument();
}

BOOL CEdsDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
	//清空列表视图
	m_pEdsView->GetListCtrl().DeleteAllItems();
	m_parrNode->RemoveAll();
	CFile file;
	CFileException e;
	//打开EDS文件
	if(!file.Open(lpszPathName,CFile::modeRead,&e))
	{
		e.ReportError();
		return false;
	}
	HINSTANCE hInst = NULL;
	//加载DLL来读取EDS数据
	hInst = LoadLibrary("EDG.dll");
	if(!hInst)
	{
		AfxMessageBox("未找到EDG.dll文件,该文件用于读取EDS信息.");
		file.Close();
		return true;
	}
	//加载数据读取函数
	typedef bool(*EDSGET)(HWND hwnd,CFile& file,LPARRNODE parrNode);
	EDSGET EdsGet = (EDSGET)GetProcAddress(hInst,"EdsDateGet");
	if(!EdsGet)
	{
		AfxMessageBox("EDS.dll数据被破坏,请与厂家联系");
		FreeLibrary(hInst);
		file.Close();
		return true;
	}
	LPARRNODE parrNode = new CArray<NODEINFO,NODEINFO&>;
	if(EdsGet(AfxGetApp()->m_pMainWnd->m_hWnd,file,parrNode))
		for(BYTE i=0;i<parrNode->GetSize();i++) m_parrNode->Add(parrNode->GetAt(i));

	//加载数据释放函数
	typedef void (*RELEASEEDSDATA)(LPARRNODE parrNode);
	RELEASEEDSDATA ReleaseEdsData = (RELEASEEDSDATA)GetProcAddress(hInst,"ReleaseEdsData");
	if(!ReleaseEdsData)
	{
		AfxMessageBox("EDS.dll数据被破坏");
		FreeLibrary(hInst);
		file.Close();
		return false;
	}
	ReleaseEdsData(parrNode);
	//释放DLL
	FreeLibrary(hInst);
	delete parrNode;
	//关闭文件
	file.Close();
	if(!m_parrNode->GetSize()) return true;
	//调用视图显示数据
	CString str;
	for(BYTE i=0;i<(m_parrNode->GetSize());i++)
	{
		str.Format("%d",m_parrNode->GetAt(i).strNodeName);
		m_pEdsView->GetListCtrl().InsertItem(i,(m_parrNode->GetAt(i)).strNodeName,0);
		m_pEdsView->GetListCtrl().SetItemText(i,1,str);
		m_pEdsView->GetListCtrl().SetItemText(i,2,VDataType[m_parrNode->GetAt(i).nNodeDataType]);
		m_pEdsView->GetListCtrl().SetItemText(i,3,m_parrNode->GetAt(i).strNodeUnit);
		m_pEdsView->GetListCtrl().SetItemText(i,4,VDataIO[m_parrNode->GetAt(i).nNodeIOType]);
	}

	return TRUE;
}

⌨️ 快捷键说明

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