我期待升级传统VB6 COM +组件到VB.NET的组件。 我似乎已经已经升级一个,叫EventPackage,其中有一类,IEventListener。 另外,TradeOrders, Implements EventPackage.IEventListener
。 当试图建立TradeOrders,我收到以下错误/警告;
- 无法加载类型库参考“EventPackage”。 库没有注册。 (从HRESULT异常:0x8002801D(TYPE_E_LIBNOTREGISTERED))
- 引用的组件“EventPackage”找不到。
- 类型“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
子项。 正如你可能会怀疑,搜索“0D76C094-21A6-4E04-802B-6E539F7102D7”的REG产生任何结果。
所以我知道这一定是一个注册表问题,但我似乎已经想尽谷歌的结果我已经找到。 我曾尝试Regasm和regsvcs .EXE的无济于事。 许多网页只是告诉我该DLL拖动到COM +经理应该自动注册的组件。
那么,如何注册类型库?
我如何做EventPackage COM +组件详细
- 冉VB6-> VB.NET向导
然后,我增加了一些行AssemblyInfo.vb文件
- 增加
Imports System.EnterpriseServices
- 增加
Imports System.EnterpriseServices
-
Imports System.Data.SqlClient
-
<Assembly: CLSCompliant(True)>
-
<Assembly: AssemblyKeyFileAttribute("...")>
的强名称 -
<Assembly: Guid("...")>
(其中,“ ...”是COM +旧的组件的CLSID)
我增加了以下的类文件IEventListener.VB
-
Imports System.EnterpriseServices
-
<ComClass("...")> _
(其中...是适当的COM + CLSID,这是唯一的一个参数) -
Inherits ServicedComponent
- 改变由转换向导制作为适当的值的ID(从
<System.Runtime.InteropServices.ProgId("IEventListener_NET.IEventListener)>
到<System.Runtime.InteropServices.ProgId("EventPackage.IEventListener")> _
然后,我拖着DLL到COM +经理在适当的COM +应用程序(虽然未指定“路径”时,只说mscoree.dll
)