C++ 通过代码托管的方式调用c#的httpAgilityPack库
来源:互联网 发布:如何将mac照片导入硬盘 编辑:程序博客网 时间:2024/06/13 07:10
c#的httpAgilityPack是一款优秀的HTML解析库。最重要的是可以通过XPath来解析。可惜我们用C++的只能通过托管代码的方式来调用了。
托管代码设置:
ALT+F7 打开属性页-属性配置-常规-公共语言运行时支持-公共语言运行时支持(clr)
#include<afxwin.h>#include<string> using namespace std;using namespace System;#using <System.Xml.dll>#using "..\Debug\HtmlAgilityPack.dll"using namespace HtmlAgilityPack; #include<list>list<string> _links;using namespace System::Runtime::InteropServices; //Marshal//System::String转std::stringvoid MarshalString ( String^ s, string& os ) { const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer(); os = chars; Marshal::FreeHGlobal(IntPtr((void*)chars));}inline void ParseLink(HtmlNode^ node, String^ name){HtmlAttribute ^att = node->Attributes[name];if(att == nullptr)return;String^ str = node->Name;if ((name == "href") && (node->Name != "link"))return;string strValue ;MarshalString(att->Value,strValue);_links.push_back(strValue);}void CTESTDlg::OnBnClickedOk(){ string url = "http://www.sina.com";; String^ str2 = gcnew String(url.c_str()); HtmlWeb ^hw = gcnew HtmlWeb(); HtmlDocument ^doc = hw->Load(str2);doc->Save("mshome.htm");HtmlNodeCollection ^atts = doc->DocumentNode->SelectNodes("//*[@background or @lowsrc or @src or @href]");for(int i = 0;i < atts->Count;i ++){ParseLink(atts[i], "background");ParseLink(atts[i], "href");ParseLink(atts[i], "src");ParseLink(atts[i], "lowsrc");}string strurl;list<string>::iterator v;for(v = _links.begin();v != _links.end();++v){strurl += (*v);strurl += " ";}m_edit.SetWindowTextA(strurl.c_str());CString str = ":";int a =1;}
测试源代码地址
http://download.csdn.net/detail/witch_soya/4978532
- C++ 通过代码托管的方式调用c#的httpAgilityPack库
- C#调用非托管的代码
- ironpython获取进程的磁盘io--通过调用c#的非托管代码
- 【c++】C#调用C++ DLL 托管方式
- [C#/C++]C#调用非托管DLL的APIs
- [C#/C++]C#调用非托管DLL的APIs
- [C#/C++]C#调用非托管DLL的APIs
- 非托管C++代码调用C#编写的dll方法
- 非托管C++代码调用C#编写的dll方法
- C#使用DllImport调用非托管的代码
- 非托管C++代码调用C#编写的dll方法
- c++ 非托管程序调用c#托管程序l的实现操作方式
- C#调用非托管C编写DLL的数据类型转换
- C调用c#的托管字符串传送UTF8字符集方法
- C#调用非托管C++DLL的两种方法
- 在C#中调用托管和非托管代码的问题
- C#调用c代码生成的dll,报PInvoke 签名与非托管的目标签名不匹配
- 托管代码和非托管代码的相互调用
- ruby 特殊字符cgi转换
- 用div+css布局,控件排布乱了,如何解决
- MAC下安装与配置MySQL
- MSVCRTD.LIB和LIBCMTD.LIB冲突 (转)
- 基于unity3d(C#)的有限状态机设计(二)
- C++ 通过代码托管的方式调用c#的httpAgilityPack库
- C++、VC++、MFC区别和联系
- hadoop常用运维命令1
- cocos2dx粒子碰撞检测
- std::string的工具函数
- 扫雷游戏中求当前点四周雷的个数
- Android的LogCat的使用
- 用JS创建form在FireFox中不能提交的问题
- excel 2003 读取sqlserver 数据库表数据(图)