この種の問題を把握するために私が使用する手法は、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 がインストールされていることを確認してください。