0

従来の VB6 COM+ コンポーネントを VB.NET コンポーネントにアップグレードしようとしています。私は、IEventListener という 1 つのクラスを持つ EventPackage と呼ばれるものを既にアップグレードしているようです。別の、TradeOrders Implements EventPackage.IEventListener、. TradeOrders をビルドしようとすると、次のエラー/警告が表示されます。

  1. 参照 "EventPackage" のタイプ ライブラリを読み込めません。ライブラリが登録されていません。(HRESULT からの例外: 0x8002801D (TYPE_E_LIBNOTREGISTERED))
  2. 参照されたコンポーネント 'EventPackage' が見つかりませんでした。
  3. タイプ 'EventPackage.IEventListener' が定義されていません。

.vbproj で、この参照に気付きました

<COMReference Include="EventPackage">
  <Guid>{0D76C094-21A6-4E04-802B-6E539F7102D7}</Guid>
  <Lcid>0</Lcid>
  <VersionMajor>2</VersionMajor>
  <VersionMinor>0</VersionMinor>
  <WrapperTool>tlbimp</WrapperTool>
</COMReference>

この Guid のレジストリを検索すると、何も見つかりません。同様の COM+ オブジェクトに GUID を使用する場合、それらはHKEY_CLASSES_ROOT\CLSID\{...}\TypeLib("..." は他のコンポーネントの GUID です) にあります。EventPackage.IEventListener に対応するレジストリ キー名に移動すると、\TypeLibサブキーがないことがわかります。ご想像のとおり、reg で "0D76C094-21A6-4E04-802B-6E539F7102D7" を検索しても結果は得られません。

これはレジストリの問題に違いないことはわかっていますが、見つけたすべてのグーグルの結果を試してみました。Regasm と regsvcs .exe を試しましたが、役に立ちませんでした。多くのページでは、dll を COM+ マネージャーにドラッグすると、コンポーネントが自動的に登録されるはずだとだけ書かれています。

では、タイプ ライブラリを登録するにはどうすればよいでしょうか。

EventPackage COM+ コンポーネントの作成方法の詳細

  1. VB6->VB.NETウィザードを実行しました

次に、いくつかの行を assemblyinfo.vb ファイルに追加しました

  1. 追加したImports System.EnterpriseServices
  2. 追加したImports System.EnterpriseServices
  3. Imports System.Data.SqlClient
  4. <Assembly: CLSCompliant(True)>
  5. <Assembly: AssemblyKeyFileAttribute("...")>強い名前に
  6. <Assembly: Guid("...")>(「...」は古いコンポーネントの COM+ CLSID です)

クラスファイル IEventListener.VB に以下を追加しました

  1. Imports System.EnterpriseServices
  2. <ComClass("...")> _(... は適切な COM+ CLSID であり、それが唯一の引数です)
  3. Inherits ServicedComponent
  4. 変換ウィザードによって作成された ID を適切な値に変更しました (<System.Runtime.InteropServices.ProgId("IEventListener_NET.IEventListener)>から<System.Runtime.InteropServices.ProgId("EventPackage.IEventListener")> _

次に、適切な COM+ アプリケーションの COM+ マネージャーに DLL をドラッグしました (ただし、「パス」は指定されておらず、 とだけ表示されていますmscoree.dll) 。

4

3 に答える 3

0

コンソールコマンド「zippy32mydll.dll」は、COMコンポーネントを登録します。次に、HKEY_CLASSES_ROOT \ CLASSIDの下にGUIDを見つけることができるはずです。この下に、InprocServer32フォルダーにdllへのパスがあります。これは、COMがdllを検索する方法です。

于 2012-06-07T04:19:20.907 に答える
0

昨日、そのダムエラー(0x8002801D(TYPE_E_LIBNOTREGISTERED))が発生しました。それは、私を夢中にさせました:VSTOアドイン、COMAddIns、およびRequestComAddInAutomationService

それは赤ニシンかもしれませんが、私の答えには、存在しないregキーなどに関する同様の詳細があります。

Visual Studio(2010)を右クリック>[管理者として実行]>[プロジェクトを開く]>[コンパイル]!

于 2012-06-06T00:22:22.060 に答える
0

ここでの問題は、.NET コンポーネントのタイプ ライブラリを生成していないことだと思います。regasm を使用したとおっしゃっていましたが、正しいコマンド ラインを使用しましたか?

  • スタート メニュー=>プログラム=> Microsoft .NET Framework SDK vX.Y => SDK コマンド プロンプト
  • このコマンド ライン ラインで、次のように入力します。regasm /tlb:Mydll.dll
于 2012-06-07T09:13:52.707 に答える