動態載入 MSHTML.dll,取得 ShowHTMLDialog 函數指標,建立 URL Moniker 顯示 HTML 內容。
BOOL ShowHtml() {
HINSTANCE hMshtml = LoadLibrary(_T("MSHTML.DLL"));
if (!hMshtml) return FALSE;
using PFN_SHOWHTMLDIALOG = HRESULT (WINAPI*)(HWND, IMoniker*, VARIANT*, VARIANT*, VARIANT*);
auto pfnShowHTMLDialog = (PFN_SHOWHTMLDIALOG)GetProcAddress(hMshtml, "ShowHTMLDialog");
if (!pfnShowHTMLDialog) { FreeLibrary(hMshtml); return FALSE; }
WCHAR url[] = L"https://www.example.com/page.html";
IMoniker* pMoniker = NULL;
HRESULT hr = CreateURLMoniker(NULL, url, &pMoniker);
if (FAILED(hr)) { FreeLibrary(hMshtml); return FALSE; }
hr = pfnShowHTMLDialog(NULL, pMoniker, NULL, NULL, NULL);
pMoniker->Release();
FreeLibrary(hMshtml);
return SUCCEEDED(hr);
}
MSHTML.dll 導致無該 DLL 系統上啟動失敗。CreateURLMoniker 將 URL 封裝為 COM 物件,支援 https://、file://、res:// 等協定。VARIANT 設定對話框尺寸、標題、外部物件 (window.external) 等。ShowHTMLDialog 僅接受 Moniker。若需顯示記憶體字串,可:
file:// Moniker。IMoniker (透過 IPersistStreamInit/IStream) 直接串流記憶體資料。CHtmlView / WebBrowser2 控制項 + IPersistStreamInit::Load 載入 IStream 包裝的記憶體資料(更靈活,參考文章 83504)。MSHTML.dll),現代 Windows 內建滿足。mshtml.lib,可直接 #include 靜態呼叫,但動態載入更彈性。