既存の ActiveX コントロールのアップグレード

既存 ActiveX コントロール (以前の OLE コントロール) は、変更せずにインターネットで使用できます。 ただし、コントロールを変更してパフォーマンスを向上させる必要が生じる場合があります。

重要

ActiveX は、新しい開発には使用すべきではないレガシ テクノロジです。 ActiveX に取って代わる最新のテクノロジの詳細については、「ActiveX コントロール」を参照してください。 ActiveX コントロールのサポートは、新しいバージョンの Internet Explorer で非推奨とされ、最新のブラウザーではサポートされていません。 Microsoft では、Web からアクセス可能な ActiveX コンポーネントは提供されなくなりました。

Web ページでコントロールを使用する場合は、追加の考慮事項があります。 .ocx ファイルとサポートされるすべてのファイルは、ターゲット コンピューター上にあるか、インターネットでダウンロードする必要があります。 これにより、コード サイズとダウンロード時間が重要な考慮事項になります。 ダウンロードしたものは、署名付き .cab ファイルにパッケージ化することができます。 コントロールに、スクリプトを作成しても安全であり、初期化しても安全であるとマークできます。

この記事では、次のトピックについて説明します。

ActiveX コントロール: 最適化」の説明に従って、最適化を追加することもできます。 モニカーを使用すると、「インターネット上の ActiveX コントロール」で説明されているように、プロパティと大きい BLOB を非同期でダウンロードできます。

ダウンロード用のコードをパッケージ化する

このテーマの詳細については、「ActiveX コントロールのパッケージ化」を参照してください。

CODEBASE タグ

ActiveX コントロールは、<OBJECT> タグを使用して Web ページに埋め込まれます。 <OBJECT> タグの CODEBASE パラメーターは、コントロールをダウンロードする場所を指定します。 CODEBASE は、多数の異なる種類のファイルを正常にポイントできます。

OCX ファイルと共に CODEBASE タグを使用する

CODEBASE="http://example.contoso.com/mycontrol.ocx#version=4,
    70,
    0,
    1086"

このソリューションでは、コントロールの .ocx ファイルのみをダウンロードし、サポートする DLL がクライアント コンピューターに既にインストールされている必要があります。 Internet Explorer には、Visual C++ コントロールをサポートする DLL が含まれているため、これは、Visual C++ でビルドされた Internet Explorer コントロールと MFC ActiveX コントロールに対して機能します。 ActiveX コントロール対応の別のインターネット ブラウザを使用してこのコントロールを表示する場合、このソリューションは機能しません。

INF ファイルと共に CODEBASE タグを使用する

CODEBASE="http://example.contoso.com/trustme.inf"

.inf ファイルは、.ocx とそのサポート ファイルのインストールを制御します。 .inf ファイルに署名できないため、このメソッドは推奨されません (コード署名のポインターについては、「署名コード」を参照してください)。

CAB ファイルと共に CODEBASE タグを使用する

CODEBASE="http://example.contoso.com/acontrol.cab#version=1,
    2,
    0,
    0"

キャビネット ファイルは、MFC を使用する ActiveX コントロールをパッケージ化するための推奨される方法です。 キャビネット ファイルに MFC ActiveX コントロールをパッケージ化すると、.inf ファイルを組み込んで、ActiveX コントロールと任意の依存 DLL (MFC DLL など) のインストールを制御できます。 CAB ファイルを使用すると、迅速にダウンロードするためにコードが自動的に圧縮されます。 コンポーネントのダウンロードに .cab ファイルを使用している場合は、個々のコンポーネントよりも .cab ファイル全体を署名する方が簡単です。

CAB ファイルを作成する

キャビネット ファイルを作成するためのツールが、Windows SDK に含まれるようになりました。

CODEBASE がポイントするキャビネット ファイルには、ActiveX コントロール用の .ocx ファイルと、そのインストールを制御するための .inf ファイルが含まれている必要があります。 キャビネット ファイルを作成するには、コントロール ファイルの名前と .inf ファイルを指定します。 このキャビネット ファイルには、システムに既に存在する可能性のある依存 DLL は含めないでください。 たとえば、MFC DLL は別のキャビネット ファイルにパッケージ化され、制御する .inf ファイルによって参照されます。

CAB ファイルの作成方法の詳細については、「CAB ファイルの作成」を参照してください。

INF ファイル

次の例の spindial.inf は、MFC Spindial コントロールに必要なサポート ファイルとバージョン情報を一覧表示します。 mfc42.cab が Microsoft によって提供され、署名されています。

Contents of spindial.inf:
[mfc42installer]
file-win32-x86=http://example.contoso.com/controls/vc/mfc42.cab
[Olepro32.dll] - FileVersion=5,
    0,
    4261,
    0
[Mfc42.dll] - FileVersion=6,
    0,
    8168,
    0
[Msvcrt.dll] - FileVersion=6,
    0,
    8168,
    0

<OBJECT> タグ

次の例は、<OBJECT> タグを使用して MFC Spindial サンプル コントロールをパッケージ化する方法を示しています。

<OBJECT ID="Spindial1" WIDTH=100 HEIGHT=51
    CLASSID="CLSID:06889605-B8D0-101A-91F1-00608CEAD5B3"
    CODEBASE="http://example.contoso.com/spindial.cab#Version=1,0,0,001">
<PARAM NAME="_Version" VALUE="65536">
<PARAM NAME="_ExtentX" VALUE="2646">
<PARAM NAME="_ExtentY" VALUE="1323">
<PARAM NAME="_StockProps" VALUE="0">
<PARAM NAME="NeedlePosition" VALUE="2">
</OBJECT>

この場合、spindial.cab には spindial.ocx および spindial.inf という 2 つのファイルが含まれます。 次のコマンドを実行すると、キャビネット ファイルがビルドされます。

C:\CabDevKit\cabarc.exe -s 6144 N spindial.cab spindial.ocx spindial.inf

-s 6144 パラメーターは、コード署名のためにキャビネット内の領域を予約します。

バージョン タグ

ここでは、CAB ファイルで指定された #Version の情報が、<OBJECT> タグの CLASSID パラメーターで指定されたコントロールに適用されます。

指定したバージョンに応じて、コントロールを強制的にダウンロードできます。 CODEBASE パラメーターを含む、OBJECT タグの完全な仕様については、W3C リファレンスを参照してください。

スクリプト作成と初期化を行っても安全であるとコントロールにマークをつける

Web ページで使用される ActiveX コントロールは、実際に安全である場合、スクリプトを作成しても安全で、初期化しても安全であるとマークする必要があります。 安全な制御では、ディスク IO を実行したり、マシンのメモリやレジスタに直接アクセスしたりすることはできません。

コントロールは、スクリプトを作成しても安全であるとマークし、レジストリを介して初期化しても安全であるとマークできます。 DllRegisterServer を変更して、次のようなエントリを追加し、スクリプト作成とレジストリでの永続化を行っても安全であるとコントロールにマークします。 別の方法として、IObjectSafety を実装することもできます。

コントロールの GUID (グローバル一意識別子) を定義して、スクリプト作成と永続化を行っても安全であるとマークします。 安全にスクリプト化できるコントロールには、次のようなレジストリ エントリが含まれます。

HKEY_CLASSES_ROOT\Component Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}

永続的なデータから安全に初期化できるコントロールは、次のようなレジストリ エントリを使用して永続化しても安全であるとマークされます。

HKEY_CLASSES_ROOT\Component Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}

次のようなエントリを追加し ({06889605-B8D0-101A-91F1-00608CEAD5B3} の代わりにコントロールのクラス ID を置き換え)、キーを次のクラス ID に関連付けます。

HKEY_CLASSES_ROOT\CLSID\{06889605-B8D0-101A-91F1-00608CEAD5B3}\Implemented Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}
HKEY_CLASSES_ROOT\CLSID\{06889605-B8D0-101A-91F1-00608CEAD5B3}\Implemented Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}

ライセンスに関する問題点

Web ページでライセンス付与されたコントロールを使用する場合は、ライセンス契約によってインターネット上での使用が許可されていることを確認し、そのためのライセンス パッケージ ファイル (LPK) を作成する必要があります。

Internet Explorer を実行しているコンピューターに、コントロールを使用するためのライセンスが付与されていない場合、ライセンス付与された ActiveX コントロールは HTML ページで正しく読み込まれません。 たとえば、ライセンス付与されたコントロールが Visual C++ を使用してビルドされた場合、コントロールを使用する HTML ページは、コントロールがビルドされたコンピューターに正しく読み込まれますが、ライセンス情報が含まれていない限り、別のコンピューターには読み込まれません。

Internet Explorer でライセンス付与された ActiveX コントロールを使用するには、ベンダーのライセンス契約を確認して、コントロールのライセンスで次が許可されていることを確認する必要があります。

  • 再配布

  • インターネット上でのコントロールの使用

  • Codebase パラメーターの使用

ライセンス付与されていないコンピューターの HTML ページでライセンス付与されたコントロールを使用するには、ライセンス パッケージ ファイル (LPK) を生成する必要があります。 LPK ファイルには、HTML ページのライセンス付与されたコントロールのランタイム ライセンスが含まれています。 このファイルは、ActiveX SDK に付属している LPK_TOOL.EXE で生成されます。

LPK ファイルを作成するには

  1. コントロールの使用がライセンス付与されているコンピュータ上で LPK_TOOL.EXE を実行します。

  2. [License Package Authoring Tool (ライセンス パッケージ作成ツール)] ダイアログ ボックスの [利用可能な制御] リスト ボックスで、HTML ページで使用するライセンス付きの各 ActiveX コントロールを選択し、[追加] をクリックします。

  3. [保存] をクリック して終了 し、LPK ファイルの名前を入力します。 これにより LPK ファイルが作成され、アプリケーションが閉じます。

HTML ページにライセンス付与されたコントロールを埋め込むには

  1. HTML ページを編集します。 HTML ページで、License Manager オブジェクトの <OBJECT> タグを、他の <OBJECT> タグの前に挿入します。 License Manager は、Internet Explorer でインストールされる ActiveX コントロールです。 そのクラス ID を次に示します。 License Manager オブジェクトの LPKPath プロパティを LPK ファイルのパスと名前に設定します。 HTML ページごとに使用できる LPK ファイルは 1 つのみです。
<OBJECT CLASSID = "clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
<PARAM NAME="LPKPath" VALUE="relative URL to .LPK file">
</OBJECT>
  1. ライセンス マネージャー タグの後に、ライセンス付与されたコントロールの <OBJECT> タグを挿入します。

    たとえば、Microsoft Masked Edit コントロールを表示する HTML ページを次に示します。 最初のクラス ID は License Manager コントロール用であり、2 番目のクラス ID は Masked Edit コントロール用です。 以前に作成した .lpk ファイルの相対パスを指すタグを変更し、コントロールのクラス ID を含むオブジェクト タグを追加します。

  2. NCompass ActiveX プラグインを使用している場合は、LPK ファイルの <EMBED> 属性を挿入します。

    コントロールが他の Active 対応ブラウザー (NCompass ActiveX プラグインを使用する Netscape など) で表示される場合は、次に示すように <EMBED> 構文を追加する必要があります。

<OBJECT CLASSID="clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
<PARAM NAME="LPKPath" VALUE="maskedit.lpk">

<EMBED SRC = "maskedit.LPK">

</OBJECT>
<OBJECT CLASSID="clsid:C932BA85-4374-101B-A56C-00AA003668DC" WIDTH=100 HEIGHT=25>
</OBJECT>

コントロール のライセンスの詳細については、「ActiveX コントロール: ActiveX コントロールのライセンス」を参照してください。

署名コード

コード署名は、コードのソースを識別し、コードが署名された後にそのコードが変更されていないことを保証するように設計されています。 ブラウザーの安全性の設定によっては、コードがダウンロードされる前にユーザーに警告が表示される場合があります。 ユーザーは、特定の証明書の所有者または会社を信頼することができます。その場合、それらの信頼されたものによって署名されたコードは警告なしでダウンロードされます。 改ざんを回避するために、コードはデジタル署名されます。

信頼の警告メッセージを表示せずにコントロールを自動的にダウンロードするには、最終的なコードが署名済みである必要があります。 コードに署名する方法の詳細については、ActiveX SDK の Authenticode に関するドキュメントを確認し、「Signing a CAB File」を参照してください。

信頼性とブラウザーの安全性レベルの設定によっては、署名者または会社を識別する証明書が表示される場合があります。 安全性レベルが none の場合、または署名されたコントロールの証明書所有者が信頼されている場合、証明書は表示されません。 ブラウザーの安全設定によってコントロールがダウンロードされるか、証明書が表示されるかがどのように決定されるかについては、「Internet Explorer ブラウザーの安全性レベルと制御動作」を参照してください。

デジタル署名では、コードが署名された後にそのコードが変更されていないことが保証されます。 コードのハッシュが取得され、証明書に埋め込されます。 このハッシュは、後で、コードがダウンロードされた後、かつ、実行される前に取得されたコードのハッシュと比較されます。 Verisign などの企業は、コードに署名するために必要なプライベート キーと公開キーを提供できます。 ActiveX SDK には、テスト証明書を作成するためのユーティリティである MakeCert が含まれています。

パレットの管理

コンテナーによってパレットが決定され、アンビエント プロパティ DISPID_AMBIENT_PALETTE として使用できます。 コンテナー (たとえば、Internet Explorer) は、ページ上のすべての ActiveX コントロールが独自のパレットを決定するために使用するパレットを選択します。 これにより、表示のちらつきがなくなり、一貫した外観が表示されます。

コントロールは OnAmbientPropertyChange をオーバーライドして、パレットへの変更の通知を処理できます。

コントロールは OnGetColorSet をオーバーライドして、パレットを描画する色セットを返すことができます。 コンテナーは戻り値を使用して、コントロールがパレット対応かどうかを判断します。

OCX 96 ガイドラインでは、コントロールは常にバックグラウンドでパレットを認識する必要があります。

アンビエント パレット プロパティを使用しない古いコンテナーは、WM_QUERYNEWPALETTE メッセージと WM_PALETTECHANGED メッセージを送信します。 コントロールは、OnQueryNewPaletteOnPaletteChanged をオーバーライドして、これらのメッセージを処理できます。

Internet Explorer ブラウザーの安全性レベルと制御動作

ブラウザーには、ユーザーが構成できる安全性レベルのオプションがあります。 Web ページには、ユーザーのコンピューターに損害を与える可能性のあるアクティブなコンテンツが含まれている可能性があるため、ブラウザーでユーザーは安全レベルのオプションを選択できます。 ブラウザーで安全性レベルを実装する方法によっては、コントロールをまったくダウンロードできない場合や、証明書または警告メッセージが表示され、ユーザーはコントロールをダウンロードするかどうかに関して実行時に選択できる場合があります。 Internet Explorer で安全性レベルが高、中、低の場合の ActiveX コントロールの動作を次に示します。

安全性モードが高の場合

  • 署名されていないコントロールはダウンロードされません。

  • 署名付きコントロールでは、信頼されていない場合に証明書が表示されます (ユーザーは、今後、この証明書所有者のコードを常に信頼するオプションを選択できます)。

  • 安全とマークされたコントロールのみが永続的なデータを持ち、スクリプトを作成できます。

安全性モードが中の場合

  • 署名されていないコントロールでは、ダウンロード前に警告が表示されます。

  • 署名付きコントロールでは、信頼されていない場合は証明書が表示されます。

  • 安全としてマークされていないコントロールでは、警告が表示されます。

安全性モードが低の場合

  • コントロールは警告なしでダウンロードされます。

  • スクリプトと永続化は警告なしで発生します。

関連項目

MFC インターネット プログラミングの作業
MFC インターネット プログラミングの基礎
MFC ActiveX コントロール: ActiveX コントロールのライセンス