既存の ActiveX コントロールのアップグレード
既存の ActiveX コントロール (以前の OLE コントロール) をそのままインターネットで使用することもできますが、 パフォーマンスを向上させるためにコントロールを変更します。 コントロールを Web ページで使う場合は、さらに検討しなければならない点があります。 .OCX ファイルとすべての関連ファイルは、ターゲット コンピューターに保存するか、インターネット経由でダウンロードする必要があります。 このため、コードのサイズとダウンロードにかかる時間が重要な検討事項になります。 ダウンロード ファイルは、単一の .CAB ファイルに署名付きでパッケージ化できます。 コントロールには、スクリプトおよび初期化の安全性を示すマークを付けることができます。
ここでは、次のトピックについて説明します。
ダウンロード用のコードのパッケージ化
スクリプトと初期化の安全性を示すマークの付加
ライセンスの問題
コードの署名
パレットの管理
Internet Explorer ブラウザーの安全レベルとコントロールの動作
また、最適化処理を追加することもできます。詳細については、「MFC ActiveX コントロール : 最適化」を参照してください。 モニカーを使うと、プロパティやサイズの大きな BLOB を非同期でダウンロードできます。詳細については、「インターネット上の ActiveX コントロール」を参照してください。
ダウンロード用のコードのパッケージ化
詳細については、サポート技術情報の文書「HOWTO: Package MFC Controls for Use Over the Internet (Q167158)」を参照してください。 サポート技術情報の文書は、MSDN ライブラリ CD-ROM または https://support.microsoft.com/support で参照できます。
CODEBASE タグ
ActiveX コントロールは、<OBJECT> タグを使って Web ページに埋め込まれます。 <OBJECT> タグの CODEBASE パラメーターは、コントロールのダウンロード元の場所を指定します。 CODEBASE では、種類が異なる複数のファイルを指定できます。
OCX ファイルでの CODEBASE タグの使い方
CODEBASE="http://example.microsoft.com/mycontrol.ocx#version=4,70,0,1086"
この方法では、コントロールの .OCX ファイルだけがダウンロードされます。したがって、あらかじめ関連 DLL をクライアント コンピューターにインストールしておく必要があります。 この方法は、Visual C++ でビルドした MFC ActiveX コントロールと Internet Explorer で使用できます。Internet Explorer には、Visual C++ コントロールの関連 DLL が同梱されているからです。 ActiveX コントロール対応の別のインターネット ブラウザーでこのコントロールを表示する場合は、この方法を使用できません。
INF ファイルでの CODEBASE タグの使い方
CODEBASE="http://example.microsoft.com/trustme.inf"
.INF ファイルは、.OCX ファイルとその関連ファイルのインストールを制御します。 ただし、.INF ファイルには署名を行うことができないため、この方法はお勧めできません。コードの署名については、「コードの署名」を参照してください。
CAB ファイルでの CODEBASE タグの使い方
CODEBASE="http://example.microsoft.com/acontrol.cab#version=1,2,0,0"
MFC を使用する ActiveX コントロールのパッケージ化には、キャビネット ファイルの使用をお勧めします。 MFC ActiveX コントロールをキャビネット ファイルにパッケージ化すると、.INF ファイルを取り込んで、ActiveX コントロールと関連 DLL (MFC DLL など) のインストールを制御できます。 CAB ファイルを使うと、コードが自動的に圧縮されるため、ダウンロード時間を短縮できます。 .CAB ファイルを使用してコンポーネントをダウンロードする場合は、各コンポーネントに署名するより、.CAB ファイル全体に署名する方が高速です。
CAB ファイルの作成
サポート技術情報の文書から Cabinet Development Kit をダウンロードできます 310618: Microsoft Cabinet Software Development Kit。 このキットには、キャビネット ファイルの作成に必要なツールが収められています。
CODEBASE が指すキャビネット ファイルには、ActiveX コントロールの .OCX ファイルと、そのインストールを制御するための .INF ファイルを取り込む必要があります。 キャビネット ファイルを作成するには、コントロールのファイルと .INF ファイルの名前を指定します。 ただし、システムに既に存在する関連 DLL (MFC の各種 DLL など) は含めないでください。 MFC DLL は、別のキャビネット ファイルにパッケージ化されているため、.INF ファイルから参照されます。
CAB ファイルの作成方法については、「CAB ファイルの作成」を参照してください。
INF ファイル
ここでは、spindial.inf の例を示します。spindial.inf には、MFC Spindial コントロールに必要な関連ファイルとバージョン情報の一覧が含まれています。 MFC の各種 DLL の格納場所は Microsoft の Web サイトです。 mfc42.cab は、Microsoft が提供し署名しています。
Contents of spindial.inf:
[mfc42installer]
file-win32-x86=http://activex.microsoft.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> タグを使って MFC Spindial サンプル コントロールをパッケージ化する例を示します。
<OBJECT ID="Spindial1" WIDTH=100 HEIGHT=51
CLASSID="CLSID:06889605-B8D0-101A-91F1-00608CEAD5B3"
CODEBASE="http://example.microsoft.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 で、キャビネット内にコード署名用のスペースを確保します。
Version タグ
ここでは、.CAB ファイルで指定した #Version 情報が、<OBJECT> タグの CLASSID パラメーターで指定したコントロールに適用されます。
指定したバージョンのコントロールを強制的にダウンロードできます。 CODEBASE パラメーターを含む OBJECT タグの詳細仕様については、W3C (World Wide Web Consortium) のリファレンスを参照してください。
スクリプトと初期化の安全性を示すマークの付加
Web ページで使用する ActiveX コントロールの安全性を確認できた場合は、スクリプトと初期化の安全性を示すマークを付ける必要があります。 安全なコントロールとは、ディスク入出力を行わず、コンピューターのメモリおよびレジスタに直接アクセスしないコントロールのことです。
コントロールにスクリプトと初期化の安全性を示すマークを付けるには、レジストリを使います。 DllRegisterServer を変更して、コントロールのスクリプトと永続性が安全であることを示す以下のようなエントリをレジストリに追加します。 IObjectSafety を実装して、コントロールの安全性を示すこともできます。
コントロールの GUID (Globally Unique Identifier) を定義して、スクリプトと永続性の安全性を示すマークを付けます。 安全にスクリプトを実行できるコントロールには、次のようなレジストリ エントリが含まれます。
HKEY_CLASSES_ROOT\Component Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}
永続データから安全に初期化できるコントロールには、次のように、永続性の安全性を示すマークがレジストリ エントリに付加されます。
HKEY_CLASSES_ROOT\Component Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}
次のようなエントリを追加して、キーをクラス ID に対応付けます。{06889605-B8D0-101A-91F1-00608CEAD5B3} の部分には、該当するコントロールのクラス 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) を作成します。
ライセンス コントロールとは、使用許諾が必要なコントロールのことです。使用許諾が必要な ActiveX コントロールを HTML ページに読み込むには、Internet Explorer が稼働するコンピューターにそのコントロールのライセンスが必要です。 たとえば、ライセンス コントロールを Visual C++ で作成した場合、このコントロールを使った HTML ページは、コントロールを作成したコンピューターには正しく読み込まれますが、ライセンス情報がない別のコンピューターには読み込まれません。
使用許諾が必要な ActiveX コントロールを Internet Explorer で使用するには、販売元の使用許諾契約を調べ、コントロールのライセンスが以下の事項を許可しているかどうかを確認する必要があります。
再配布
インターネット上での当該コントロールの使用
Codebase パラメーターの使用
HTML ページ内のライセンス コントロールをライセンスのないコンピューターで使用するには、ライセンス パッケージ ファイル (LPK) を作成する必要があります。 LPK ファイルには、HTML ページ内のライセンス コントロール用のランタイム ライセンスを取り込みます。 このファイルは、ActiveX SDK 付属の LPK_TOOL.EXE を使って作成します。 詳細については、MSDN Web サイトで https://msdn.microsoft.com参照します。
LPK ファイルを作成するには
当該コントロールの使用許諾のあるコンピューターで、LPK_TOOL.EXE を実行します。
[License Package Authoring Tool] ダイアログ ボックスの [Available Controls] ボックスの一覧から、HTML ページで使用する ActiveX コントロールを選択し、[Add] をクリックします。
Save & Exit をクリックし、LPK ファイルの名前を入力します。 LPK ファイルが作成され、アプリケーションが終了します。
HTML ページにライセンス コントロールを埋め込むには
HTML ページを編集します。 HTML ページで、他の <オブジェクト> タグの前にライセンス マネージャー オブジェクト用の <OBJECT> タグを <挿入> します。 ライセンス マネージャーは、Internet Explorer と共にインストールされる ActiveX コントロールです。 このクラス ID を以下に示します。 ライセンス マネージャー オブジェクトの LPKPath プロパティに、LPK ファイルのパスおよび名前を設定します。 HTML ファイルと LPK ファイルは一対一で対応付けてください。
<OBJECT CLASSID = "clsid:5220cb21-c88d-11cf-b347-00aa00a28331"> <PARAM NAME="LPKPath" VALUE="relative URL to .LPK file"> </OBJECT>
ライセンス <コントロール用の> <OBJECT> タグは、ライセンス マネージャー タグ挿入します。
次に、Microsoft Masked Edit コントロールを表示する HTML ページの例を示します。 1 番目のクラス ID はライセンス マネージャー コントロール用です。2 番目のクラス ID は Masked Edit コントロール用です。 これらのタグを変更して、以前に作成した .LPK ファイルの相対パスを指すようにして、コントロール用のクラス ID を含む <OBJECT> タグを追加します。
Ncompass ActiveX <プラグインを使う場合は、LPK ファイルの埋め込み> 属性を挿入します。
コントロールは、他の実行中の対応のブラウザーで表示される場合があります。たとえば、Ncompass ActiveX プラグインを使う Netscape —次に示すように <>、埋め込みの構文を追加する必要があります。
<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>
コントロールのライセンスの詳細については、「MFC ActiveX コントロール : ActiveX コントロールのライセンス」を参照してください。
コードの署名
コードの署名の目的は、コードの提供元を識別すること、およびそのコードが署名後に変更されていないことを保証することです。 ブラウザー側で安全性に関する設定を行って、ユーザーがコードをダウンロードする前に警告を表示することもできます。 ユーザーは、信頼する証明書所有者または所有会社を選択できます。選択した所有者または会社の署名が入ったコードは、警告が表示されずにダウンロードされます。 コードの署名は電子的に行われるため、コードの不正な変更を防止できます。
完成したコードに署名したことを確認します。署名が入っていれば、信頼性に関する警告メッセージが表示されずに、コントロールが自動的にダウンロードされます。 コードの署名方法の詳細については、SDK の Authenticode のドキュメントを参照して、CAB ファイルの署名を参照してください。
信頼性に関する設定とブラウザー側の安全レベルに関する設定によっては、証明書を表示して署名した個人または法人を確認できます。 安全レベルが設定されていない場合、または署名の入ったコントロールの証明書所有者が信頼されている場合は、証明書が表示されません。 ブラウザー側の安全性に関する設定によって、コントロールのダウンロードおよび証明書の表示を指定する方法については、「Internet Explorer ブラウザーの安全レベルとコントロールの動作」を参照してください。
電子署名は、署名後にコードが変更されていないことを保証します。 コードのハッシュが取られて、証明書に埋め込まれます。 このハッシュは、ダウンロードした実行前のコードから取得したハッシュと比較されます。 ベリサイン社などの企業は、コードの署名に必要な秘密キーおよび公開キーを提供しています。 ActiveX SDK には、テスト証明書を作成するためのユーティリティである MakeCert が付属しています。
パレットの管理
コンテナーはパレットを特定し、このパレットをアンビエント プロパティ DISPID_AMBIENT_PALETTE として設定します。 コンテナーは (Internet Explorer) は独自のパレットを決定するために、ページのすべての ActiveX コントロールで使用されるパレットを選択します。 したがって、ディスプレイのちらつきが防止され、一貫した外観が提供されます。
OnAmbientPropertyChange をオーバーライドすると、コントロールでパレット変更の通知を処理できます。
OnGetColorSet をオーバーライドすると、コントロールがパレットを描画するカラー セットを返すことができます。 コンテナーは、この戻り値に基づき、コントロールがパレットを認識しているかどうかを判断します。
OCX 96 ガイドラインでは、コントロールはパレットを必ずバックグラウンドで実現する必要があります。
アンビエント パレット プロパティを使用しない旧式のコンテナーは、WM_QUERYNEWPALETTE メッセージおよび WM_PALETTECHANGED メッセージを送ります。 コントロールでこれらのメッセージを処理するには、OnQueryNewPalette と OnPaletteChanged をオーバーライドします。
Internet Explorer ブラウザーの安全レベルとコントロールの動作
ブラウザーには、ユーザーが設定できる安全レベルのオプションがあります。 Web ページには、ユーザーのコンピューターに悪影響を与えるアクティブ コンテンツが含まれている場合があります。このため、ブラウザー側ではユーザーが安全レベルを選択できるようになっています。 ブラウザーに実装する安全レベルによっては、コントロールがまったくダウンロードされない場合もあります。また、証明書や警告メッセージが表示されて、そのコントロールをダウンロードするかどうかをユーザーが実行時に選択できる場合もあります。 次に、Internet Explorer の高、中、および低の安全レベルにおける ActiveX コントロールの動作を示します。
高レベルの安全モード
署名のないコントロールはダウンロードされません。
署名のあるコントロールをまだ信頼していない場合は、証明書が表示されます。このとき、ユーザーはこの証明書所有者のコードを以後常に信頼することを選択できます。
安全性を示すマークの付いたコントロールだけが永続データを所有し、スクリプトを実行できます。
中レベルの安全モード
署名のないコントロールをダウンロードしようとすると、警告が表示されます。
署名のあるコントロールをまだ信頼していない場合は、証明書が表示されます。
コントロールに安全性を示すマークが付いていない場合は、警告が表示されます。
低レベルの安全モード
コントロールは警告なしにダウンロードされます。
スクリプトや永続化は、警告なしに発生します。
参照
関連項目
MFC ActiveX コントロール : ActiveX コントロールのライセンス