• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++转C#

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
//结构体
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\"?>\r\n"\
		"<PPVSPMessage>\r\n"\
		"<Version>4.0</Version>\r\n"\
		"<Sequence>1</Sequence>\r\n"\
		"<CommandType>REQUEST</CommandType>\r\n"\
		"<Method>CONTROL</Method>\r\n"\
		"<Command>UPLOADPIC</Command>\r\n"\
		"<Params>\r\n"\
		"<Chan>1</Chan>\r\n"\
		"<Filename>%s</Filename>\r\n"\
		"</Params>\r\n"\
		"</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;

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#dataGridView根据数据调整列宽发布时间:2022-07-10
下一篇:
C#调用带结构体指针的CDll的方法发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap