4

簡潔に言うと、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 を登録することはありません。仕方ないよ。

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

マイク

4

1 に答える 1

1

system32 の dll に regasm を使用しても問題はありませんでした。私は常に /Codebase スイッチを使用します。これにより、VB6 が混乱しないように、レジストリに tlb の場所が配置されます。

詳細については、MSDN ページを参照してください。

于 2010-05-27T00:47:57.713 に答える