1

C# でビルドされた ActiveX DLL があります。DLL は VB6 アプリケーションで使用されます (また、従来の ASP アプリケーションでも使用されます)。

DLL は C# クラス ライブラリ プロジェクトです。

  • ソース コード内のクラスおよびインターフェイスの Guid 属性
  • プロジェクト内の COM 関連の属性/設定
  • ソースコードの progid 属性

すべて明らかに適切に設定されています。

証拠として、DLL を regasm /codebase /tlb:xxxxx に登録しており、VB6 dev env は参照ウィンドウで COM オブジェクトを確認できます。

プロジェクトに COM DLL 参照を追加すると、Intellisense が動作し、すべて正常に動作し、アプリケーションが正しくコンパイルされます。

問題は、コンパイルされたアプリケーションの exe ファイルと同じフォルダーに DLL のコピーを置かないと、DLL 内のクラスのインスタンスをインスタンス化しようとして失敗することです。返されるエラーは「指定されたファイルが見つかりません」です。DLL のコピーがアプリケーションの exe と同じ場所にあれば、すべて問題なく動作します。

同様の問題への言及を見つけましたが、解決方法に関するヒントや手がかりはありません。

マリオ

4

2 に答える 2

2

まず、VB6 はインテリセンスに TypeLib のみを使用するため、DLL に関しては何も証明されません。

ここにあるProcessMonitorを使用して、VB6 dllのロードプロセスを監視することをお勧めします。アプリフォルダーにないことを確認し、登録した場所に保管してください。パスを見つけるためのレジストリ ルックアップと、パスを検索するファイル IO の両方を確認できます。

それでも解決しない場合は、結果を返信してください。

于 2012-08-03T11:49:11.847 に答える
0

VB6 で RegAsm を使用していて、アセンブリを GAC に配置しない場合、ファイルを RegAsm するときに /Codebase オプションを使用しない限り、実行中のアプリケーションと同じディレクトリに配置する必要があります。

于 2012-08-03T15:38:13.197 に答える