xml文件作为函数的参数

猜猜 2012-09-26 10:47:01
xml文件作为一个函数的参数,void API_DoCmd(const char* xml,int len);
在外部调用时,该函数的第一个参数是什么?xml里面是一些结构体,因为之前是用结构体传参数,现在想改用xml文件形式,怎么实现?急
...全文
257 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wumn29 2012-09-26
  • 打赏
  • 举报
回复
void API_DoCmd(const char* xmlfilename);
{
FILE * pFile = fopen(xmlfilename, "ab+");
if (pFile == NULL)
{
return;
}
long lSize;
char *buffer;
fseek(pFile, 0L, SEEK_END);
lSize = ftell(pFile);
fseek(pFile,0L,SEEK_SET);
buffer = (char*)malloc(lSize+1);
if(buffer == NULL)
{
return 0;
}
fread(buffer, sizeof(char), lSize, pFile);
buffer[lSize] = '\0';
//buffer里面就是读出的xml字符串, 然后执行你原来的逻辑就ok了

}
猜猜 2012-09-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
1.
参数在内存中构建:

C/C++ code

“<args><arg>value1</arg><arg>value2</arg></args>”


2,参数放在文件中

"args.xml"
[/Quote]


参数是放在.xml中,就是之前用结构体传参,现在用xml传参,但是在xml中好多格式问题没法解决,发现好难,还有,假如这个API_DoCmd()函数写好后,外部调用时,该函数的第一个参数怎么写。
mujiok2003 2012-09-26
  • 打赏
  • 举报
回复
1.
参数在内存中构建:
“<args><arg>value1</arg><arg>value2</arg></args>”


2,参数放在文件中

"args.xml"
猜猜 2012-09-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
剩下就是解析想xml字符串的逻辑了, 我完善一下。
假设原来的xml结构体是这样的
struct XML_Demo
{
std::string head;
std::string body;
};

void API_DoCmd(const char* xmlfilename);
{
FILE * pFile = fopen(xmlfilename, "ab+");
[/Quote]

之前用客户端调用的这个函数:
m_nHandle = API_RealPlay(m_nLoginID[0],&client);
STRU_CLIENTINFO client;
typedef struct STRU_CLIENTINFO
{
DWORD dwDevIpAddr; ///< 编码器设备ip
short nChannel; ///< 通道号
enum HS_PLAY_REAL_MODE nMode; ///< 播放模式
HWND hPlayWnd; ///< 播放窗口的句柄
DWORD dwMultiCastIpAddr; ///< 多播组地址
DWORD dwMultiCastPort; ///< 组播端口;
}*LPSTRU_CLIENTINFO;
现在改成调用void API_DoCmd(const char* xml,int len),
我要做的工作是编写函数void API_DoCmd(const char* xml,int len),用xml替换结构体作为参数传入。该怎么做啊??刚接触,什么都不懂啊?
wumn29 2012-09-26
  • 打赏
  • 举报
回复
剩下就是解析想xml字符串的逻辑了, 我完善一下。
假设原来的xml结构体是这样的
struct XML_Demo
{
std::string head;
std::string body;
};

void API_DoCmd(const char* xmlfilename);
{
FILE * pFile = fopen(xmlfilename, "ab+");
if (pFile == NULL)
{
return;
}
long lSize;
char *buffer;
fseek(pFile, 0L, SEEK_END);
lSize = ftell(pFile);
fseek(pFile,0L,SEEK_SET);
buffer = (char*)malloc(lSize+1);
if(buffer == NULL)
{
return 0;
}
fread(buffer, sizeof(char), lSize, pFile);
buffer[lSize] = '\0';
std::string data = buffer;
free(buffer);
fclose (pFile);
if(data == "")
{
return;
}
std::type_size sidx = data.find("<head>");
if(sidx == data.npos)
{
return;
}
std::type_size sidx = data.find("<head>");
if(sidx == data.npos)
{
return;
}
std::type_size eidx = data.find("</head>");
if(eidx == data.npos || eidx < sidx+6)
{
return;
}

std::string head = data.substr(sidx+6, eidx-sidx-6);//取出了xml里面的head
sidx = data.find("<body>");
if(sidx == data.npos)
{
return;
}
eidx = data.find("</body>");
if(eidx == data.npos || eidx < sidx+6)
{
return;
}

std::string body= data.substr(sidx+6, eidx-sidx-6);//取出了xml里面的body

//你那个接口里面原来的逻辑也就是处理结构体里面的字段, 现在取出了xml里面的字段, 后面就不用
//我说了
}

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧