0

C# で記述された DLL を実行しようとする VB6 プログラムがあります。
この DLL には COM インターフェイスがあるため、"CreateObject" を使用してその中にクラスのオブジェクトを作成できます。問題は、VB6 IDE から実行すると正常に動作することですが、EXE を作成して実行しようとすると、
「自動化エラーです。指定されたファイルが見つかりません (-2147024894)」という例外がスローされます。 ."

なぜそれが起こっているのですか、どうすれば解決できますか?

4

4 に答える 4

0

インストーラーとしてコンパイルし、インストーラーパッケージのコンパイルに使用するdll / comを含めて、使用するdll / comがexeのコンパイルに含まれるようにします。Windowsではなく、それを過ぎてコピーするだけです。

于 2011-06-23T04:04:29.320 に答える
0

この種の問題を把握するために私が使用する手法は、Visual Basic 6 で [参照の追加] ダイアログを開くことです。使用可能な COM ライブラリのリストをスクロールして、問題のある DLL がリストされているかどうかを確認します。その場合、CreateObject が機能するはずです。それをバリアント バリアントに割り当て、遅延バインディングを使用してそのメンバーにアクセスできるはずです。

さらに、変数への参照を一時的に設定し、CreateObject を使用する代わりに = New を使用して、表示されるエラー メッセージを確認します。一般に、CreateObject によってスローされたものよりも有益であることがわかりました。

最後に、参照を設定する代わりに CreateObject を使用することを選択した理由を投稿すると役立ちます。DLL がプログラムによって継続的に使用される既知のオブジェクトである場合は、参照を設定し、通常は事前バインディングを使用する必要があります。

最後に、DLL 自体ではなく、C# COM DLL の依存関係が原因でエラーが発生している可能性があります。たとえば、Com ライブラリを取得して適切に登録しようとしても、COM ライブラリ Widget2000 に依存していて登録されていない場合、自動化エラーがスローされます。特に、EXE をコンパイルした環境ではなく、インストールされた環境で EXE をテストしている場合。

たとえば、VB6 で記述された CAD プログラムがあり、MyCAD で始まるソース ツリーがあるとします。exe は MyCAD/MainEXE にあり、シェイプ ライブラリは MyCAD/ShapeLibrary にあります。IDE を実行しても問題ありません。次に、セットアップを行い、テストマシンに移動してインストールすると、シェイプライブラリの作成時にエラーが発生します。

最初に、MainEXE がソース ツリーの MainEXE ディレクトリから直接実行されるかどうかを確認します。そのテストは、それがインストールの問題なのか、IDE とコンパイルされたバージョンの癖なのかを排除します。次に、セットアップを見て、登録されていないものを確認します。また、C# ライブラリのソースまたはライブラリのセットアップを見て、必要な依存関係を確認してください。これはコンパイル済みの COM DLL であるため、依存関係ウォーカー ツールを使用して、必要な COM 参照を確認できます。最後に、正しいバージョンの .NET Framework がインストールされていることを確認してください。

于 2011-06-06T12:31:00.123 に答える
0

テスト マシンで C# DLL をコンパイルする場合は、COM 相互運用設定のレジスタにチェックを入れていることを確認してください。同じマシンでコンパイルしていない場合は、/codebase オプションを指定してRegAsmを実行する必要があります。

于 2011-06-08T15:01:34.563 に答える
0

IDE の [プロジェクト]、[参照] を見て、CreateObject で参照しているオブジェクトに属している dll または ocx ファイルを調べます (オブジェクト マネージャーも調べるのに役立つ場合があります)。この dll ファイルは、exe のコンパイル時にも使用できる必要があります。通常、regsvr32.exe に登録する必要があります。

于 2011-06-05T09:21:51.673 に答える