1

IE用のツールバーを設計しようとしています。ツールバーの32ビット バージョンと64 ビットバージョンのコンパイルに成功し、どちらもIE9で期待どおりに動作しています。しかし、Windows 8のIE10で試してみると、ツールバーが読み込まれません。IE は [アドオンの管理] でツールバーを表示でき、32 ビットと 64 ビットで有効になっています。しかし、それはロードされていません。DllMain メソッドに警告ボックスを配置したこともありますが、それでもありません。私のプラグインでは、IEInternals ブログで説明されているステートメントを追加しました。

DEFINE_GUID(CATID_AppContainerCompatible, 0x59fb2056,0xd625,0x48d0,0xa9,0x44,0x1a,0x85,0xb5,0xab,0x26,0x40);

他に何が欠けていますか?

4

2 に答える 2

1

DEFINE_GUID 呼び出しは、コード内で GUID 値の定数を定義するだけであり、オブジェクトを COM コンポーネント カテゴリ (レジストリに格納されている) に登録することは実際には何もしていません。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms692551(v=vs.85).aspxおよび http://msdn.microsoft.com/en-us/library/windows/を参照してください。デスクトップ/ms694322(v=vs.85).aspx

OLEView ツールを使用して、さまざまなカテゴリに登録されているオブジェクトを確認できます。

また、BHO の DLL を AppContainer で読み取り可能なフォルダー (\Program Files\ フォルダーのサブフォルダーなど) に配置してください。そうしないと、拡張保護モードの IE インスタンスによって DLL が読み込まれません。

于 2013-07-12T03:16:04.670 に答える
0

「IEPMapi.h」を含める必要があります

IEMapi.h は、Windows SDK Windows 8.1 SDKに同梱されています。

次に、DllRegisterServer によって呼び出されるこのような関数が必要です。そのため、dll が regsvr32 によって呼び出されると、レジストリ HKEY_CLASS_ROOT の下のツールバー クラス ID の下に互換性のあるカテゴリがマークされます。

    bool RegisterCLSIDInCategory(REFCLSID clsID)
   {
      CComPtr<ICatRegister> catRegister = NULL ;
      HRESULT hr = ::CoCreateInstance(CLSID_StdComponentCategoriesMgr,
                              NULL,
                              CLSCTX_INPROC_SERVER,
                              IID_ICatRegister,
                              (void**)&catRegister);
      if (SUCCEEDED(hr))
      {
         // Register this category as being "implemented" by
         // the class.
         CATID rgcatid[] ={ CATID_AppContainerCompatible};

         HRESULT hr2 = catRegister->RegisterClassImplCategories(clsID, 1, rgcatid);
         if (SUCCEEDED(hr2))
         {
            return true;
         }         
      }
      return false;
   }
于 2013-12-12T04:38:06.330 に答える