📄 icmdtest.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 + -