次の方法で共有


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

更新 : 2007 年 11 月

既存の 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) は、MSDN Web サイト https://msdn.microsoft.com/workshop/management/cab/cabdl.asp で入手できます。Web リンクは、予告なしに変更される場合があります。このキットには、キャビネット ファイルの作成に必要なツールが収められています。

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> タグ

次に、<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: license package file) を作成する必要があります。

ライセンス コントロールとは、使用許諾が必要なコントロールのことです。使用許諾が必要な ActiveX コントロールを HTML ページに読み込むには、Internet Explorer が稼働するコンピュータにそのコントロールのライセンスが必要です。たとえば、ライセンス コントロールを Visual C++ で作成した場合、このコントロールを使った HTML ページは、コントロールを作成したコンピュータには正しく読み込まれますが、ライセンス情報がない別のコンピュータには読み込まれません。

使用許諾が必要な ActiveX コントロールを Internet Explorer で使用するには、販売元の使用許諾契約を調べ、コントロールのライセンスが以下の事項を許可しているかどうかを確認する必要があります。

  • 再配布

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

  • Codebase パラメータの使用

HTML ページ内のライセンス コントロールをライセンスのないコンピュータで使用するには、ライセンス パッケージ ファイル (LPK) を作成する必要があります。LPK ファイルには、HTML ページ内のライセンス コントロール用のランタイム ライセンスを取り込みます。このファイルは、ActiveX SDK 付属の LPK_TOOL.EXE を使って作成します。詳細については、MSDN Web サイト (https://www.microsoft.com/japan/msdn) を参照してください。

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

  1. 当該コントロールの使用許諾のあるコンピュータで、LPK_TOOL.EXE を実行します。

  2. [License Package Authoring Tool] ダイアログ ボックスの [Available Controls] ボックスの一覧から、HTML ページで使用する ActiveX コントロールを選択し、[Add] をクリックします。

  3. [Save & Exit] をクリックし、LPK ファイルの名前を入力します。LPK ファイルが作成され、アプリケーションが終了します。

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

  1. HTML ページを編集します。ライセンス マネージャ オブジェクト用の <OBJECT> タグをすべての <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>
    
  2. ライセンス コントロール用の <OBJECT> タグは、ライセンス マネージャ タグの後ろに挿入します。

    次に、Microsoft Masked Edit コントロールを表示する HTML ページの例を示します。1 番目のクラス ID はライセンス マネージャ コントロール用です。2 番目のクラス ID は Masked Edit コントロール用です。これらのタグを変更して、以前に作成した .LPK ファイルの相対パスを指すようにして、コントロール用のクラス ID を含む <OBJECT> タグを追加します。

  3. Ncompass ActiveX プラグインを使う場合は、LPK ファイル用に <EMBED> 属性を挿入します。

    Ncompass ActiveX プラグインを使う Netscape など、他の Active 対応ブラウザでコントロールを表示する場合は、次のように <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>
    

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

コードの署名

コードの署名の目的は、コードの提供元を識別すること、およびそのコードが署名後に変更されていないことを保証することです。ブラウザ側で安全性に関する設定を行って、ユーザーがコードをダウンロードする前に警告を表示することもできます。ユーザーは、信頼する証明書所有者または所有会社を選択できます。選択した所有者または会社の署名が入ったコードは、警告が表示されずにダウンロードされます。コードの署名は電子的に行われるため、コードの不正な変更を防止できます。

完成したコードに署名したことを確認します。署名が入っていれば、信頼性に関する警告メッセージが表示されずに、コントロールが自動的にダウンロードされます。コードの署名方法の詳細については、「CAB ファイルの署名」と『ActiveX SDK』の Authenticode™ のドキュメントを参照してください。

信頼性に関する設定とブラウザ側の安全レベルに関する設定によっては、証明書を表示して署名した個人または法人を確認できます。安全レベルが設定されていない場合、または署名の入ったコントロールの証明書所有者が信頼されている場合は、証明書が表示されません。ブラウザ側の安全性に関する設定によって、コントロールのダウンロードおよび証明書の表示を指定する方法については、「Internet Explorer ブラウザの安全レベルとコントロールの動作」を参照してください。

電子署名は、署名後にコードが変更されていないことを保証します。コードのハッシュが取られて、証明書に埋め込まれます。このハッシュは、ダウンロードした実行前のコードから取得したハッシュと比較されます。ベリサイン社などの企業は、コードの署名に必要な秘密キーおよび公開キーを提供しています。ActiveX SDK には、テスト用証明書の作成用ユーティリティである MakeCert と、ブラウザがテスト用証明書を正当と見なすかどうかを指定するレジストリ ファイル wvtston.reg と wvtstoff.reg が同梱されています。

パレットの管理

コンテナはパレットを特定し、このパレットをアンビエント プロパティ DISPID_AMBIENT_PALETTE として設定します。Microsoft Internet Explorer などのコンテナでは、ページ上のすべての ActiveX コントロールで使用する独自のパレットを選択できます。したがって、ディスプレイのちらつきが防止され、一貫した外観が提供されます。

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

OnGetColorSet をオーバーライドすると、コントロールがパレットを描画するカラー セットを返すことができます。コンテナは、この戻り値に基づき、コントロールがパレットを認識しているかどうかを判断します。

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

アンビエント パレット プロパティを使用しない旧式のコンテナは、WM_QUERYNEWPALETTE メッセージおよび WM_PALETTECHANGED メッセージを送ります。コントロールでこれらのメッセージを処理するには、OnQueryNewPaletteOnPaletteChanged をオーバーライドします。

Internet Explorer ブラウザの安全レベルとコントロールの動作

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

高レベルの安全モード

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

  • 署名のあるコントロールをまだ信頼していない場合は、証明書が表示されます。このとき、ユーザーはこの証明書所有者のコードを以後常に信頼することを選択できます。

  • 安全性を示すマークの付いたコントロールだけが永続データを所有し、スクリプトを実行できます。

中レベルの安全モード

  • 署名のないコントロールをダウンロードしようとすると、警告が表示されます。

  • 署名のあるコントロールをまだ信頼していない場合は、証明書が表示されます。

  • コントロールに安全性を示すマークが付いていない場合は、警告が表示されます。

低レベルの安全モード

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

  • スクリプトや永続化は、警告なしに発生します。

参照

概念

MFC インターネット プログラミングの作業

MFC インターネット プログラミングの基礎

参照

MFC ActiveX コントロール : ActiveX コントロールのライセンス