htmlcxx工程的vs2015首次成功使用过程
笔者最近在做一个工程需要用到处理html文件和数据,不想自己动手,就搜了下判断应该可以应用开源的htmlcxx,然后就去下了一个0.87的版本,下载链接:https://iweb.dl.sourceforge.net/project/htmlcxx/v0.87/htmlcxx-0.87.zip,有需要的朋友可以自行前往官方下载.
首先就想着应该直接源码自己集成到自己的动态库多方便可以省下不少事情吧,那就做一个工程吧,把这些个源码都堆进去看看吧:
第一步建立动态库工程如图:
第二步添加压缩包的源码:
第三步建立相关筛选器的把源代码目录拖入相应的筛选器去得到如图箭头指示的相关文件就放进去了:
第四步:编译看看出现如图所示错误:
第5步修改相关代码
5.1:css_syntax.c1445行中修改到下面代码同样方法替换掉css_lex.c文件中的函数(原因是微软库里添加警告说不安全函数要用安全函数替换)
css_lex.c文件还要替换isatty成_isatty,fileno->_fileno
5.2:添加预处理关闭错误如图设置:
5.3:自己建立一个unistd.h文件:放下面内容:
#ifndef _UNISTD_H
#define _UNISTD_H
#include <io.h>
#include <process.h>
#endif /* _UNISTD_H */
5.4还有如下错误
修改
文件名找到这个文字改成图片中的值
下面这个文件就没有那么容易了要下一个工程
到官网下一个吧:windows_conv下载地址把文件复制进去后注意修改一下 <iconv.h>成"iconv.h",(CharsetConverter.cc文件和CharsetConverter.h)都需要修改
又出现问题了:
修改代码:
还要弄个 iconv.h代码和工程来编译,到了这边我已经不想再继续了,再修复错误什么就太麻烦了.
开始第二个方法吧:去掉它工程里不要的文件进行编译是否可行,那就先尝试一下吧:
工程中去掉这3个文件编译成功
这3个文件其实就是测试用的,作者自己也没有加进去我们看第二种编译模式看看吧.
第二种方法就简单了:
直接用作者的项目我们来看看:
直接用vs打开如图的文件升级一下
得到工程就是如图的文件
编译一下有一个错误修改一下该行把第二个图片中选取的字符重新打过一下:
编译结果通过得到静态库如图:
我集成到自己的工程中就出现问题了包含相应路径的方法各自不同就不说了如图是笔者的一个路径:
复制于htmlcxx工程中的测试例程文件htmlcxx.cc进行相应修改一下而已:
加个测试函数:
int testhtmlcxx()//本函数来源于htmlcxx.cc稍做裁减
{
extern std::string Edusystem_demo_str;
tree<HTML::Node> tr;
bool parse_css = true;
string css_code;
try
{
string html= Edusystem_demo_str;
HTML::ParserDom parser;
parser.parse(html);
tr = parser.getTree();
cout << tr << endl;
}
catch (exception &e) {
cerr << "Exception " << e.what() << " caught" << endl;
exit(1);
}
catch (...) {
cerr << "Unknow exception caught " << endl;
}
if (parse_css)
{
cerr << "Css parsing not supported in win32" << endl;
return 1;
}
return 0;
}
出现如下错误:
这个是我自己动态库工程,把lib添加进来冲突了,试了多个方法无法解决问题,我有的lib必须要用的也是本文重点要提醒的问题:
最简单的解决方法运行库调一下重新复制lib到动态库工程:
一切都可按你想的去编写了,笔者使用的环境:vs2015有不一样的朋友可以参考一下:
笔者最早碰到的问题是动态库工程里面缺少定义一个WIN32宏如图:
由于成文时间仓促,有什么错误之处欢迎提出。
码字两个小时,对您有用不妨点个赞鼓励一下我!谢谢您看完本文!