簡潔に言うと、COM に対応し、COM 相互運用に登録されている C# クラス ライブラリを作成しました。ライブラリをコンパイルした結果、.dll ファイルと .tlb ファイルが生成されました。
VB6 アプリケーションを実行している別のマシンがあります。そこで、.dll ファイルと .tlb ファイルをマシンの C:/Windows/system32 フォルダーにコピーしました。次に、以下を使用してこれらのファイルを登録しました。
C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm C:\Windows\system32\TestClass.dll /tlb:TestClass.tlb
ファイルが正常に登録された後、VB6 アプリ内から Test.tlb ファイルへのプロジェクト参照を追加し、次のように新しい参照クラスでメソッドを呼び出そうとしました。
Dim myObject As TestNamespace.TestClass
Set myObject = New TestNamespace.TestClass
MsgBox (myObject.TestMethod())
動作せず、-2147024894 自動化エラーが発生します。
system32 のようなプライベート フォルダーに dll をインストールするべきではないことを読みました。GAC に登録するか、「/codebase」オプションを使用して別の場所に登録する必要があります。
C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm C:\TestClass.dll /tlb:TestClass.tlb /codebase
system32 を使用してはいけない理由はありますか? このプロジェクトに携わった過去の開発者は、この VB6 プロジェクトで使用されるアセンブリ ファイルを system32 に配置しましたが、問題はないようです。
dll を system32 の場所に登録すると、オートメーション エラーが発生します。dll を別の場所 (つまり C:/) に登録すると、VB6 からクラス ライブラリへのメソッド呼び出しが期待どおりに機能します。何を与える?
GAC を使用して DLL を登録することはありません。仕方ないよ。
どんな助けでも大歓迎です。
マイク