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

📄 icmdtest.cpp

📁 usblsccid-0.9.2: ED1x Smart Card Reader Driver
💻 CPP
字号:
#include "stdafx.h"
#include "scrtest.h"
#include "ICmdTest.h"
#include "CcidTest.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

CMapStringToPtr ICmdTest::m_classMap;
IMPLEMENT_DYNCREATE(ICmdTest, CObject)

CObject* ICmdTest::CreateObject(const CString& szClassName)
{
		CRuntimeClass* pClass = NULL;

		// First see if the CRuntimeClass object is cached
		if (!m_classMap.Lookup(szClassName, (void*&)pClass))
		{
				// search app specific classes
				AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
				//AfxLockGlobals(CRIT_RUNTIMECLASSLIST);
				for (pClass = pModuleState->m_classList; pClass != NULL;
					pClass = pClass->m_pNextClass)
				{
					if (lstrcmpA(szClassName, pClass->m_lpszClassName) == 0)
					{
						//AfxUnlockGlobals(CRIT_RUNTIMECLASSLIST);
						m_classMap[szClassName] = (void*&) pClass;
						break;
					}
				}
		}

		if (pClass == NULL)
		{
			TRACE1("Warning: Cannot load %hs from archive.  Class not defined.\n",
					szClassName);
			return NULL;
		}
		return pClass->CreateObject();
}

// Creates new object from node name
void ICmdTest::CreateObjects(IXMLDOMNodeListPtr pNodeList,
			CArray<ICmdTest*,ICmdTest*> &cmdArray,
			CMapStringToString &CmdIdToClass)
{
		USES_CONVERSION;
		IXMLDOMNodePtr pIDOMNode,pAttrNode;
		IXMLDOMNamedNodeMapPtr pIDOMNamedNodeMapPtr;
		CString id;
		for(int i = 0; i < pNodeList->Getlength(); i++)
		{
			pIDOMNode = pNodeList->Getitem(i);
			pIDOMNamedNodeMapPtr = pIDOMNode->Getattributes();
			pAttrNode = pIDOMNamedNodeMapPtr->getNamedItem("id");
			TRACE("%s = %s\n",
				W2T(pAttrNode->GetnodeName()),W2T(_bstr_t(pAttrNode->GetnodeValue())));
			cmdArray.Add((ICmdTest *)CreateObject(CmdIdToClass[W2T(_bstr_t(pAttrNode->GetnodeValue()))]));
			cmdArray[i]->SetXMLNode(pIDOMNode);
		}
}

void ICmdTest::CreateObjects(IXMLDOMNodeListPtr pNodeList,
			CArray<ICmdTest*,ICmdTest*> &cmdArray,
			CMapStringToRuntimeClass &CmdIdToRuntimeClass)
{
		USES_CONVERSION;
		IXMLDOMNodePtr pIDOMNode,pAttrNode;
		IXMLDOMNamedNodeMapPtr pIDOMNamedNodeMapPtr;
		CString strIdName((LPCSTR)IDS_ATTR_ID);
		CString strIdValue;
		for(int i = 0; i < pNodeList->Getlength(); i++)
		{
			pIDOMNode = pNodeList->Getitem(i);
			pIDOMNamedNodeMapPtr = pIDOMNode->Getattributes();
			pAttrNode = pIDOMNamedNodeMapPtr->getNamedItem(strIdName.GetBuffer(0));
			strIdValue = W2T(_bstr_t(pAttrNode->GetnodeValue()));
			TRACE("%s = %s\n",W2T(pAttrNode->GetnodeName()),strIdValue);
			CRuntimeClass *pClass = CmdIdToRuntimeClass[strIdValue];
			cmdArray.Add((ICmdTest *)(pClass->CreateObject()));
			cmdArray[i]->SetXMLNode(pIDOMNode);
		}
}

CString ICmdTest::GetCmdName()
{
	USES_CONVERSION;
	IXMLDOMNamedNodeMapPtr pNamedNodeMapPtr;
	IXMLDOMNodePtr pAttrNode;
	CString strName((LPCSTR)IDS_ATTR_NAME);

	pNamedNodeMapPtr = m_pXMLNode->Getattributes();
	pAttrNode = pNamedNodeMapPtr->getNamedItem(strName.GetBuffer(0));
	return W2T(_bstr_t(pAttrNode->GetnodeValue()));
}

LPBYTE ICmdTest::GetSendData(int &len)
{
	USES_CONVERSION;
	IXMLDOMNodePtr pChild;
	pChild = m_pXMLNode->selectSingleNode(_bstr_t("parameter/text()"));
	if(pChild)
	{
		LPSTR lpStr = W2A(_bstr_t(pChild->GetnodeValue()));
		len = strlen(lpStr);
		return Helper::HexToBin(lpStr,len);
	}else{
		len = 0;
		return NULL;
	}
#if 0
	IXMLDOMNodeListPtr NodeListPtr;
	NodeListPtr = m_pXMLNode->GetchildNodes();
	if (NodeListPtr != NULL)
	{
		DOMNodeType nodeType;
		while(pChild = NodeListPtr->nextNode())
		{
			pChild->get_nodeType(&nodeType);
			if(nodeType == NODE_ELEMENT)
			{
				CString s(_T("parameter"));
				if( s == W2T(pChild->GetnodeName()) )
				{
					if(pChild->hasChildNodes())
						return (LPBYTE)W2A(_bstr_t(pChild->GetfirstChild()->GetnodeValue()));
					else
						return NULL;
				}
			}
		}
	}
#endif

	return NULL;
}

LPBYTE ICmdTest::GetResponseData(int &len)
{
	len = 0;
	return NULL;
}

CString ICmdTest::GetDescription()
{
	USES_CONVERSION;
	IXMLDOMNodeListPtr NodeListPtr;
	NodeListPtr = m_pXMLNode->GetchildNodes();
	if (NodeListPtr != NULL)
	{
		IXMLDOMNodePtr pChild;
		DOMNodeType nodeType;
		while(pChild = NodeListPtr->nextNode())
		{
			pChild->get_nodeType(&nodeType);
			if(nodeType == NODE_ELEMENT)
			{
				CString s(_T("description"));
				if( s == W2T(pChild->GetnodeName()) )
				{
					if(pChild->hasChildNodes())
						return W2T(_bstr_t(pChild->GetfirstChild()->GetnodeValue()));
					else
						return _T("");
				}
			}
		}

	}
	return _T("");
}

⌨️ 快捷键说明

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