2

まず、さまざまな C++/VB6 ActiveX exe を起動する (非 ActiveX) C++ DLL を呼び出して (CLSIDFromProgID を呼び出してクラスをポイントし、CoCreateInstance を介して起動することによって) 「ジョブ」を作成するレガシー VB6 アプリケーションを扱っています。 (ジョブはさまざまなタイプのデータダウンローダーです)。私は新しいダウンローダを作成する必要があり、ActiveX は (非常に) レガシーであるため、VB.NET で COM クラス ライブラリとして作成しました (VB6 はストリーム ベースの HTTP をまったくうまく処理できないため)。他のダウンローダと同じエントリ ポイント。

私が最初に発見したことは、明らかに COM ライブラリを直接呼び出すことができないということです (ランチャーが CoCreateInstance を呼び出すと、呼び出しの後に次のステートメントで再開する前にデストラクタがトリガーされます)。 COM をインスタンス化し (Set oMyObject = CreateObject("DownloaderLib.Loader"))、「DoEvents」ループを実行します。ジョブハンドラーからそれを呼び出しも問題はなく、私の開発環境ではすべてが連携してうまく実行されます。

しかし、すべての部品をシステム テスト環境に移動すると、機能しなくなります。VB6 アプリケーションはプロキシを呼び出しますが、プロキシは COM をロード (または少なくとも実行) していないようです。イベント サーバーに何かを「表示」するコードがあるため、プロキシを起動していることはわかっています。COMに同様のコードがあり、COM内のさまざまなポイントでメッセージをディスパッチする必要があるため、COMに到達していないことはわかっています。

ActiveX exe プロキシを登録し、(「適切な」REGASM を使用して) COM ライブラリ登録しました。私の開発環境は、VS2017 と .NET Framework v4.7.03190 を使用した Win10 です。COM は、.NET Framework 4.6.1 を対象とするクラス ライブラリとして構築されます。私のシステム テスト環境は Windows Server 16 で、インストールされている .NET Framework は 4.7.2 (リリース コード 461814) で、使用した REGASM は "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\" フォルダーにあります。

他に何をする必要がありますか?何が欠けている可能性がありますか?

どんな助けでも大歓迎です。

4

1 に答える 1