社本@元ネオニート Blog

社本@元ネオニート (元々ワック) のいたずら書き (for Programmers)

AILight Banner
AILight Blog

プロフィール

社本@元ネオニート Blog
働いたら負けかなと思っていたのですが。。とうとう働き始めました。アメリカのシアトル・エリアにある企業向けのバックアップソフトを開発している会社です。日本人は私だけ。なんとか。。やっていけてるようです。

目次

Blog 利用状況

記事分類

過去の記事

タグ

相対パスのURLを絶対パスに変換する - WebBrowser/ActiveX

Micorosoft純正のCOMオブジェクトでは、HogeURL等(*)のプロパティで
相対パスが使えますが、ISVが作成したCOMオブジェクトでは相対パスが
使えなかったりします。
* : ブラウザコントロールに貼り付けるのようなものの場合

これに対応するには、以下の関数を使えばOKです。
"URLを絶対パスにする"と言っても、単なる文字列の処理ではなく、
ブラウザコントロールで表示しているページの場所と相対パスを
結合して絶対パスに変換します。


---
 static HRESULT UrlCombine(IUnknownPtr spUnkSite, LPCTSTR szRelative, CString& strCombined)
 {
  USES_CONVERSION;

  HRESULT hr = S_OK;

  try
  {
   strCombined.Empty();

   IBindHostPtr spBindHost = ::QueryBindHost(spUnkSite);
   if (spBindHost == NULL)
   {
    return E_FAIL;
   }

   IBindCtxPtr spBindCtx;
   hr = ::CreateBindCtx(0, &spBindCtx);
   if (FAILED(hr))
   {
    return hr;
   }

   IMonikerPtr spMoniker;
   hr = spBindHost->CreateMoniker(T2W(szRelative), spBindCtx, &spMoniker, 0);
   if (FAILED(hr))
   {
    return hr;
   }

   LPOLESTR wszDisplayName = NULL;
   hr = spMoniker->GetDisplayName(spBindCtx, NULL, &wszDisplayName);
   if (FAILED(hr))
   {
    return hr;
   }

   strCombined = W2T(wszDisplayName);

   // 必ず、最後に行なうこと!!
   ::CoTaskMemFree(wszDisplayName);
  }
  catch (...)
  {
   return E_FAIL;
  }

  return S_OK;
 }
---

投稿日時 : 2005年9月2日 0:22


コメントを追加

タイトル
名前
URL
コメント