1

VB6 アプリケーションを実行できるように、いくつかのコンポーネントをアプリ サーバーにコピーしました。

TABCTL32.OCX
TABCTL32.DEP
MSWINSCK.DEP
MSWINSCK.OCX
MSMAPI32.DEP
MSMAPI32.OCX
FTP.OCA
FTP.OCX
COMDLG32.OCX

ここで別の質問の回答からアドバイスを受けました。これを行うのが安全かどうか、誰でもアドバイスできますか。このサーバーには、ASP.NET アプリケーション (フレームワーク バージョン 3.5) もインストールされています。

4

2 に答える 2

4

「.OCX」拡張子で終わるファイルは、実際には 32 ビットのインプロセス COM DLL であり、使用するには登録する必要があります。これは、コマンドラインの「regsvr32」ユーティリティを介して実行されます。

これらのファイルをアプリケーションのホスト ディレクトリにコピーするだけでは、.OCX ファイルで提供されるコンポーネントに依存するアプリケーションがそれらのファイルにアクセスできるようにはなりません。これは、アプリケーションが、登録されたプログラム ID ("ProgID") を介して COM オブジェクトのインスタンスを作成し、Windows がオブジェクトの実装を提供する CLSID および COM インプロセス サーバー DLL に変換するためです。OCX が登録されていない場合、Windows が必要なマッピングを実行できるようにするための COM 情報がありません。

ProgID、ClsID、および関連するタイプ ライブラリ情報は、RegSvr32 ユーティリティを介して Windows に「公開」されます。このユーティリティは、実際にはターゲット DLL/OCX をロードするだけで、具体的には COM DLL エントリ ポイント「DllRegisterServer」を呼び出します。これにより、DLL はその COM を公開できます。登録情報。これが行われていない場合、COM 登録は使用できず、OCX/DLL でホストされているオブジェクトの呼び出しは失敗します。

重要な COM 登録情報が存在しないため、OCX ファイルをホスト フォルダーにコピーするだけでは、使用するアプリケーションがそこでホストされている COM オブジェクトを利用するのに十分ではありません。

ファイル拡張子に関する追加情報

  • .OCX - 実際には、拡張子が異なる単なる COM DLL です。これらの名前は、古い "* O *LE * C *ontrol E* x *tension" というモニカの下で VB 拡張機能のコンテナーとして与えられたため、OCX です。
  • .DEP - Windows 依存関係ファイル。これらのファイルは、Visual Basic の "セットアップ アプリケーション" の遺産を持つ傾向があり、通常、特定の EXE または DLL が他の DLL に対して持っている依存関係に関する情報を含んでいます。たとえば、A.EXE は B.DLL に依存する場合がありますが、B.DLL は C.DLL にも依存する場合があります。
  • .OCA - OCX タイプ ライブラリ キャッシュ。これは通常、オンザフライで構築され、必要に応じて再構築されます。
于 2012-09-12T17:33:10.090 に答える
2

VB6 自動登録ハックに頼らずに、これらの OCX (および DLL) のサイド バイ サイド展開を実現したい場合は、登録不要の COM にアプリケーション マニフェストを使用することをお勧めします。

ビルド時にこれらを自動的に作成するためにUMMMを使用しています。この場合、マニフェストの作成は 1 回限りのジョブになります。

あなたのケースでUMMMを使用する方法は次のとおりです。まず、App.iniこのようなファイルを作成します

Identity App.exe YourCompany.App "Application 1.0"
File TABCTL32.OCX
File MSWINSCK.OCX
File MSMAPI32.OCX
File FTP.OCX
File COMDLG32.OCX
# more OCXs/DLLs here...

UMMM.exeこのようなマニフェストを「コンパイル」します

c:>UMMM.exe App.ini App.exe.manifest

App.exe.manifestあなたの隣に置くか、このようにWindows SDKからApp.exeのリソースとして埋め込むかmt.exe

c:>mt.exe -nologo -manifest App.exe.manifest -outputresource:App.exe;1

OCX/DLL の登録を解除し (これは重要です)、アプリケーションをテストします。

于 2012-09-13T08:39:02.513 に答える