通过QueryInterface接口查询和使用IDispatch 接口进行操作的对比。

本文对比了使用QueryInterface和IDispatch接口进行网页表单自动化提交的方法。QueryInterface方式适用于已知网页设计的情况,虽然实现过程较为繁琐,但效率较高;而IDispatch方式则更加简单,尽管执行速度稍慢。
写一个提交网页表单的程序。比较了一下QueryInterface接口查询和使用IDispatch 接口进行操作

通过 QueryInterface 接口查询,然后再进行条件判断显然是比较烦琐的,但是效率比较高。适合特定的已知网页设计内容的程序。
例如自动进入126邮箱的程序。

直接使用 IDispatch 接口进行操作的,这个方式执行起来稍微慢一些,但程序比较简单。

找一个这个资料IShellWindows。
修改完宏定义(_WINDOWS;_WIN32_WINNT=0x0A00;WINVER=0x0A00;%(PreprocessorDefinitions))之后,清理然后重新生成,结果输出: 重新生成开始于 15:41... 1>------ 已启动全部重新生成: 项目: MFCApplication9, 配置: Debug x64 ------ 1>pch.cpp 1>CMyColorButton.cpp 1>Unicode 已启用 1>MFCApplication9.cpp 1>C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(18,16): error C2065: “ODS_HOT”: 未声明的标识符 1>(编译源文件“/CMyColorButton.cpp”) 1>C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(124,17): error C2065: “ODS_HOT”: 未声明的标识符 1>(编译源文件“/CMyColorButton.cpp”) 1>C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(145,5): error C2872: “Font”: 不明确的符号 1>(编译源文件“/CMyColorButton.cpp”) 1> C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\comdef.h(489,12): 1> 可能是“Font” 1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\um\GdiplusHeaders.h(256,7): 1> 或 “Gdiplus::Font” 1>C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(145,10): error C2259: “Font”: 无法实例化抽象类 1>(编译源文件“/CMyColorButton.cpp”) 1> C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\comdef.h(489,12): 1> 参见“Font”的声明 1> C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(145,10): 1> 由于下列成员: 1> C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(145,10): 1> “HRESULT IUnknown::QueryInterface(const IID &,void **)”: 是抽象的 1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\um\unknwnbase.h(121,47): 1> 参见“IUnknown::QueryInterface”的声明 1> C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(145,10): 1> “ULONG IUnknown::AddRef(void)”: 是抽象的 1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\um\unknwnbase.h(125,45): 1> 参见“IUnknown::AddRef”的声明 1> C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(145,10): 1> “ULONG IUnknown::Release(void)”: 是抽象的 1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\um\unknwnbase.h(127,45): 1> 参见“IUnknown::Release”的声明 1> C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(145,10): 1> “HRESULT IDispatch::GetTypeInfoCount(UINT *)”: 是抽象的 1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\um\oaidl.h(2309,43): 1> 参见“IDispatch::GetTypeInfoCount”的声明 1> C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(145,10): 1> “HRESULT IDispatch::GetTypeInfo(UINT,LCID,ITypeInfo **)”: 是抽象的 1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\um\oaidl.h(2312,43): 1> 参见“IDispatch::GetTypeInfo”的声明 1> C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(145,10): 1> “HRESULT IDispatch::GetIDsOfNames(const IID &,LPOLESTR *,UINT,LCID,DISPID *)”: 是抽象的 1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\um\oaidl.h(2317,43): 1> 参见“IDispatch::GetIDsOfNames”的声明 1> C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(145,10): 1> “HRESULT IDispatch::Invoke(DISPID,const IID &,LCID,WORD,DISPPARAMS *,VARIANT *,EXCEPINFO *,UINT *)”: 是抽象的 1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\um\oaidl.h(2324,57): 1> 参见“IDispatch::Invoke”的声明 1>C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(145,14): error C2259: “Font”: 无法实例化抽象类 1>(编译源文件“/CMyColorButton.cpp”) 1> C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\comdef.h(489,12): 1> 参见“Font”的声明 1> C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(145,14): 1> 由于下列成员: 1> C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(145,14): 1> “HRESULT IUnknown::QueryInterface(const IID &,void **)”: 是抽象的 1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\um\unknwnbase.h(121,47): 1> 参见“IUnknown::QueryInterface”的声明 1> C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(145,14): 1> “ULONG IUnknown::AddRef(void)”: 是抽象的 1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\um\unknwnbase.h(125,45): 1> 参见“IUnknown::AddRef”的声明 1> C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(145,14): 1> “ULONG IUnknown::Release(void)”: 是抽象的 1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\um\unknwnbase.h(127,45): 1> 参见“IUnknown::Release”的声明 1> C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(145,14): 1> “HRESULT IDispatch::GetTypeInfoCount(UINT *)”: 是抽象的 1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\um\oaidl.h(2309,43): 1> 参见“IDispatch::GetTypeInfoCount”的声明 1> C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(145,14): 1> “HRESULT IDispatch::GetTypeInfo(UINT,LCID,ITypeInfo **)”: 是抽象的 1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\um\oaidl.h(2312,43): 1> 参见“IDispatch::GetTypeInfo”的声明 1> C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(145,14): 1> “HRESULT IDispatch::GetIDsOfNames(const IID &,LPOLESTR *,UINT,LCID,DISPID *)”: 是抽象的 1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\um\oaidl.h(2317,43): 1> 参见“IDispatch::GetIDsOfNames”的声明 1> C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(145,14): 1> “HRESULT IDispatch::Invoke(DISPID,const IID &,LCID,WORD,DISPPARAMS *,VARIANT *,EXCEPINFO *,UINT *)”: 是抽象的 1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\um\oaidl.h(2324,57): 1> 参见“IDispatch::Invoke”的声明 1>C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(145,14): error C2661: “Font::Font”: 没有重载函数接受 2 个参数 1>(编译源文件“/CMyColorButton.cpp”) 1> C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(145,14): 1> 尝试匹配参数列表“(HDC, CFont *)”时 1>C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(146,68): warning C4244: “参数”: 从“int”转换到“Gdiplus::REAL”,可能丢失数据 1>(编译源文件“/CMyColorButton.cpp”) 1>C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(146,53): warning C4244: “参数”: 从“int”转换到“Gdiplus::REAL”,可能丢失数据 1>(编译源文件“/CMyColorButton.cpp”) 1>C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(146,37): warning C4244: “参数”: 从“LONG”转换到“Gdiplus::REAL”,可能丢失数据 1>(编译源文件“/CMyColorButton.cpp”) 1>C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(146,26): warning C4244: “参数”: 从“LONG”转换到“Gdiplus::REAL”,可能丢失数据 1>(编译源文件“/CMyColorButton.cpp”) 1>C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(152,14): error C2665: “Gdiplus::Graphics::DrawString”: 没有重载函数可以转换所有参数类型 1>(编译源文件“/CMyColorButton.cpp”) 1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\um\GdiplusGraphics.h(1247,5): 1> 可能是“Gdiplus::Status Gdiplus::Graphics::DrawString(const WCHAR *,INT,const Gdiplus::Font *,const Gdiplus::PointF &,const Gdiplus::StringFormat *,const Gdiplus::Brush *)” 1> C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(152,14): 1> “Gdiplus::Status Gdiplus::Graphics::DrawString(const WCHAR *,INT,const Gdiplus::Font *,const Gdiplus::PointF &,const Gdiplus::StringFormat *,const Gdiplus::Brush *)”: 无法将参数 3 从“Font *”转换为“const Gdiplus::Font *” 1> C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(152,35): 1> 指向的类型不相关; 转换需要 reinterpret_cast、C 样式强制转换或带圆括号的函数样式强制转换 1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\um\GdiplusGraphics.h(1204,5): 1> 或 “Gdiplus::Status Gdiplus::Graphics::DrawString(const WCHAR *,INT,const Gdiplus::Font *,const Gdiplus::RectF &,const Gdiplus::StringFormat *,const Gdiplus::Brush *)” 1> C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(152,14): 1> “Gdiplus::Status Gdiplus::Graphics::DrawString(const WCHAR *,INT,const Gdiplus::Font *,const Gdiplus::RectF &,const Gdiplus::StringFormat *,const Gdiplus::Brush *)”: 无法将参数 3 从“Font *”转换为“const Gdiplus::Font *” 1> C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(152,35): 1> 指向的类型不相关; 转换需要 reinterpret_cast、C 样式强制转换或带圆括号的函数样式强制转换 1> C:\Users\Li\source\repos\MFCApplication9\CMyColorButton.cpp(152,14): 1> 尝试匹配参数列表“(CString, int, Font *, Gdiplus::RectF, Gdiplus::StringFormat *, Gdiplus::SolidBrush *)”时 1>C:\Users\Li\source\repos\MFCApplication9\MFCApplication9.cpp(76,12): warning C4101: “g_gdiplusToken”: 未引用的局部变量 1>(编译源文件“/MFCApplication9.cpp”) 1>MFCApplication9Dlg.cpp 1>正在生成代码... 1>已完成生成项目“MFCApplication9.vcxproj”的操作 - 失败。 ========== 全部重新生成: 0 成功,1 失败,0 已跳过 ========== ========== 重新生成 于 15:42 完成,耗时 02.674 秒 ==========
07-05
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值