zoukankan      html  css  js  c++  java
  • C++ 转C#

    //结构体
    typedef struct tagNET_EHOME_XML_REMOTE_CTRL_PARAM
    {
        DWORD dwSize;
        void* lpInbuffer;          //控制参数缓冲区
        DWORD  dwInBufferSize;      //控制参数缓冲区长度
        DWORD  dwSendTimeOut;  //数据发送超时时间,单位ms,默认5s
        DWORD  dwRecvTimeOut;  //数据接收超时时间,单位ms,默认5s
        void *lpOutBuffer;     //输出缓冲区
        DWORD dwOutBufferSize;  //输出缓冲区大小
        void *lpStatusBuffer;   //状态缓冲区,若不需要可置为NULL
        DWORD dwStatusBufferSize;  //状态缓冲区大小
        BYTE   byRes[16];
    }NET_EHOME_XML_REMOTE_CTRL_PARAM, *LPNET_EHOME_XML_REMOTE_CTRL_PARAM;
    
    //转换的方法
    BOOL A2UTF8(const char* pCont, char* pOut, DWORD dwOutSize, DWORD* pOutLen)
    {
    	if (pCont == NULL)
    	{
    		if (pOutLen != NULL)
    		{
    			*pOutLen = (DWORD)0;
    		}
    		return TRUE;
    	}
    
    	if (pOut == NULL)
    	{
    		return FALSE;
    	}
    
    	int iNum = MultiByteToWideChar(CP_ACP, NULL, pCont, -1, NULL, NULL);
    	/*lint -e{119} 没有多余参数*/
    	wchar_t* pBuffw = new(std::nothrow) wchar_t[(DWORD)iNum];
    	if (pBuffw == NULL)
    	{
    		return FALSE;
    	}
    
    	if (MultiByteToWideChar(CP_ACP, NULL, pCont, -1, pBuffw, iNum) <= 0)
    	{
    		//MultiByteToWideChar执行失败
    		delete[] pBuffw;
    		pBuffw = NULL;
    		return FALSE;
    	}
    
    	int iLen = WideCharToMultiByte(CP_UTF8, 0, pBuffw, iNum - 1, NULL, NULL, NULL, NULL);
    
    	if (iLen <= 0)
    	{
    		//MultiByteToWideChar执行失败
    		delete[] pBuffw;
    		pBuffw = NULL;
    		return FALSE;
    	}
    
    	if ((DWORD)(iLen) > dwOutSize)
    	{
    		delete[] pBuffw;
    		pBuffw = NULL;
    		return FALSE;
    	}
    	/*lint -e{119} 没有多余参数*/
    	char* pLpsz = new char[(DWORD)iLen];
    	if (pLpsz == NULL)
    	{
    		delete[] pBuffw;
    		pBuffw = NULL;
    		return FALSE;
    	}
    
    	if (WideCharToMultiByte(CP_UTF8, 0, pBuffw, iNum - 1, pLpsz, iLen, NULL, NULL) <= 0)
    	{
    		//WideCharToMultiByte执行失败
    		delete[] pBuffw;
    		pBuffw = NULL;
    		delete[] pLpsz;
    		pLpsz = NULL;
    		return FALSE;
    	}
    
    	memset(pOut, 0, dwOutSize);
    	memcpy(pOut, pLpsz, (DWORD)iLen);
    
    	if (pOutLen != NULL)
    	{
    		*pOutLen = (DWORD)iLen;
    	}
    
    	delete[] pBuffw;
    	pBuffw = NULL;
    	delete[] pLpsz;
    	pLpsz = NULL;
    
    	return TRUE;
    }
    
    //改成C#的
    	CString strInputXml;
    
    	strInputXml.Format("<?xml version="1.0" encoding="UTF-8"?>
    "
    		"<PPVSPMessage>
    "
    		"<Version>4.0</Version>
    "
    		"<Sequence>1</Sequence>
    "
    		"<CommandType>REQUEST</CommandType>
    "
    		"<Method>CONTROL</Method>
    "
    		"<Command>UPLOADPIC</Command>
    "
    		"<Params>
    "
    		"<Chan>1</Chan>
    "
    		"<Filename>%s</Filename>
    "
    		"</Params>
    "
    		"</PPVSPMessage>", csFileName);
    
    	NET_EHOME_XML_REMOTE_CTRL_PARAM struXMLCfg = { 0 };
    	char szInBuffer[1500] = { 0 };
    	strcpy(szInBuffer, strInputXml);
    	struXMLCfg.lpInbuffer = szInBuffer;
    	struXMLCfg.dwInBufferSize = sizeof(szInBuffer);
    	DWORD dwSeq = 0;
    	struXMLCfg.lpOutBuffer = &dwSeq;
    	struXMLCfg.dwOutBufferSize = 4;
    	char szStatus[1000] = { 0 };
    	struXMLCfg.lpStatusBuffer = szStatus;
    	struXMLCfg.dwStatusBufferSize = 1000;
    
    	//需要将字符串字段转换成UTF-8
    	A2UTF8((char*)struXMLCfg.lpInbuffer, (char*)struXMLCfg.lpInbuffer, 1500, &struXMLCfg.dwInBufferSize);
    
    	struXMLCfg.dwSize = sizeof(NET_EHOME_XML_REMOTE_CTRL_PARAM);
    	struXMLCfg.dwRecvTimeOut = 30 * 1000;
  • 相关阅读:
    聚焦WCF行为的扩展
    软件设计经典书籍推荐
    善变者常新
    开发WCF/Silverlight须知
    面向对象设计讲义
    站立会议变形记
    敏捷开发思想之拥抱变化
    WCF 4.0中的WSDiscovery
    QCon日记
    创投“黑帮”,必须的
  • 原文地址:https://www.cnblogs.com/jianhongtang2016/p/7818552.html
Copyright © 2011-2022 走看看