先日から WebView2 を利用して,生成 AI で編集した画像のダウンロードをいろいろとやっている.
Gemini では –disable-web-security を有効にすることで対応した.
Copilot や ChatGPT では –disable-web-security には関係なくダウンロードできた.
それで,改めて調べて何とかできたのでメモ.
VS 2026 を使用して,新規プロジェクトの作成から.
MFC ダイアログベースのアプリケーションとしてプロジェクトを作成.
NuGet パッケージの管理で次のものをインストール.
* Microsoft.Web.WebView2
* Microsoft.Windows.ImplementationLibrary (WIL)

// XxxDlg.h に追加
#include <wrl.h>
#include <wil/com.h>
#include <WebView2.h>
class CXxxDlg : public CDialogEx
{
// ...
private:
wil::com_ptr<ICoreWebView2> m_pWeb;
wil::com_ptr<ICoreWebView2Controller> m_pCtrl;
void InitWebView();
// ...
};
// XxxDlg.cpp に追加
BOOL CXxxDlg::OnInitDialog()
{
// ...
InitWebView() ;
return TRUE ;
}
void CXxxDlg::InitWebView()
{
CreateCoreWebView2EnvironmentWithOptions(nullptr, nullptr, nullptr,
Callback<ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler>(
[this](HRESULT hr, ICoreWebView2Environment* env) -> HRESULT {
env->CreateCoreWebView2Controller(m_hWnd,
Callback<ICoreWebView2CreateCoreWebView2ControllerCompletedHandler>(
[this](HRESULT hr, ICoreWebView2Controller* ctrl) -> HRESULT {
if (SUCCEEDED(hr)) {
m_pCtrl = ctrl;
m_pCtrl->get_CoreWebView2(&m_pWeb);
m_pWeb->Navigate(L"https://dev.mish.work/");
CRect rect;
GetClientRect(&rect);
m_pCtrl->put_Bounds(rect);
}
return S_OK;
}
).Get()
);
return S_OK;
}
).Get()
);
}
次のコンパイルエラーの場合
...\Wv2GmnT\Wv2GmTD.cpp(159,3): error C2065: 'Callback': 定義されていない識別子です。
...\Wv2GmnT\Wv2GmTD.cpp(159,12): error C2275: 'ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler': 型の代わりに式が必要です
XxxDlg.cpp の先頭の方に
#include <wrl/event.h>
using namespace Microsoft::WRL;
次のリンクエラーの場合
Wv2GmTD.obj : error LNK2005: "public: static struct wistd::weak_ordering const wistd::weak_ordering::less" (?less@weak_ordering@wistd@@2U12@B) は既に Wv2GmnT.obj で定義されています。
Wv2GmTD.obj : error LNK2005: "public: static struct wistd::weak_ordering const wistd::weak_ordering::equivalent" (?equivalent@weak_ordering@wistd@@2U12@B) は既に Wv2GmnT.obj で定義されています。
Wv2GmTD.obj : error LNK2005: "public: static struct wistd::weak_ordering const wistd::weak_ordering::greater" (?greater@weak_ordering@wistd@@2U12@B) は既に Wv2GmnT.obj で定義されています。
...\x64\Debug\Wv2GmnT.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
pch.h に追加
#include <wrl.h>
#include <wil/com.h>
#include <wil/result.h>
#include <WebView2.h>
これでビルドできるようになるが,実行しても何も表示されない.
OLE の初期化が必要
BOOL CXxxApp::InitInstance()
{
AfxOleInit() ;
// ...
}
これで表示できるようになる.

0 人中 0 人がこの 投稿 は役に立ったと言っています。