【问题标题】:Creating an IWebBrowser2 control创建 IWebBrowser2 控件
【发布时间】:2018-08-05 10:05:20
【问题描述】:

我只是想成功地将它添加到我的窗口中,并且它已经出乎意料地困难了。

我试过了

#include "windef.h"
#include "winbase.h"
#include "initguid.h"
#include "ole2.h"
#include "olectl.h"
#include "shobjidl.h"
#include "shlguid.h"
#include "exdispid.h"
#include <objidl.h>
#include "OleIdl.h"
#include "Objbase.h" 

#include <exdisp.h>
#include <exdispid.h>

...

IWebBrowser2* pBrowser2;
HRESULT hr = CoCreateInstance(CLSID_InternetExplorer, NULL,
    CLSCTX_ALL, IID_IWebBrowser2, (void**)&pBrowser2);

得到

error: 'CLSID_InternetExplorer' undeclared (first use in this function)
     HRESULT hr = CoCreateInstance(CLSID_InternetExplorer,

我也试过了

CoCreateInstance(CLSID_WebBrowser, NULL, CLSCTX_LOCAL_SERVER, 
                   IID_IWebBrowser2, (void**)&pBrowser2);

这个至少可以编译,但是窗口没有添加任何东西:

    hr = OleCreate(&CLSID_WebBrowser, &IID_IOleObject, 1/*OLERENDER_DRAW*/, 0,
                            &ClientSite, &Storage, (void**)&mpWebObject);

我尝试了所有可以在网上找到的头文件和库(如您所见)。

这是我链接的库:

gcc -lmingw32 -mwindows  -luser32 -lgdiplus -lole32 -luuid -loleaut32 -lcomctl32 -lcomdlg32 -ladvapi32 -loleaut32 -lshdocvw -lmf -lmfuuid

谢谢!

【问题讨论】:

  • 如果你使用 c - 你需要在链接器输入中包含Uuid.Lib - 这里定义了CLSID_InternetExplorerIID_IWebBrowser2。你也需要使用CoCreateInstance(&amp;CLSID_InternetExplorer, NULL, CLSCTX_ALL, &amp;IID_IWebBrowser2, (void**)&amp;pBrowser2);
  • 但是您包含-luuid - 您的版本中是否存在CLSID_InternetExplorerIID_IWebBrowser2?这是来自 ms sdk 吗?
  • @RbMm 我怀疑 MinGW 没有这些常量。如果你有 Visual Studio,也许你可以 std::cout 他们?
  • 只需查看uuid.lib - 是否存在CLSID_InternetExplorerIID_IWebBrowser2。在 ms sdk 中 - 它存在。
  • 你使用的是什么 GUI 工具包

标签: c windows winapi mingw


【解决方案1】:

你可以试试MinGW-w64

这是 MinGW 的一个分支,除了支持 32 位和 64 位构建之外,它还在积极开发中。特别是改进了 Windows API 标头。

【讨论】:

    【解决方案2】:

    显然 MinGW 不支持 IWebBrowser2。代码在 Visual Studio 中运行良好。

    【讨论】:

    • @selbie Windows SDK 依赖于非标准的 MSVC 编译器扩展;像 mingw 这样的项目的大部分工作涉及创建与 g++ 一起使用的标头
    【解决方案3】:

    首先包含这些头文件:

    #include <windows.h>
    #include <objbase.h>
    #include <ExDisp.h>
    #include <ExDispid.h>
    

    然后这个:

    IWebBrowser2* pBrowser2 = nullptr;
    HRESULT hr;
    hr = CoCreateInstance(__uuidof(WebBrowser), NULL, CLSCTX_INPROC, __uuidof(IWebBrowser2), (void**)pBrowser2);
    

    使用 __uuidof 宏可以解决与外部定义的 guid 的链接问题。

    【讨论】:

    • __uuidof 是 Microsoft 特定的扩展,仅在 C++ 中可用。 OP 正在使用 GCC 和 C。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 2018-04-09
    • 2017-02-14
    相关资源
    最近更新 更多