如何正确地注册一个VB.NET COM +组件的类型库?(How do I properly reg

2019-10-31 18:21发布

我期待升级传统VB6 COM +组件到VB.NET的组件。 我似乎已经已经升级一个,叫EventPackage,其中有一类,IEventListener。 另外,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子项。 正如你可能会怀疑,搜索“0D76C094-21A6-4E04-802B-6E539F7102D7”的REG产生任何结果。

所以我知道这一定是一个注册表问题,但我似乎已经想尽谷歌的结果我已经找到。 我曾尝试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")> _

然后,我拖着DLL到COM +经理在适当的COM +应用程序(虽然未指定“路径”时,只说mscoree.dll

Answer 1:

昨天我说大坝错误(0x8002801D(TYPE_E_LIBNOTREGISTERED)),它让我抓狂: VSTO加载项,COMAddIns和RequestComAddInAutomationService

这可能是一个红鲱鱼,但我的回答有关于不存在雷吉·基斯和等类似的细节:

右键单击的Visual Studio(2010年)>以管理员身份运行>打开项目>编译!



Answer 2:

控制台命令“REGSVR32 MYDLL.DLL”将注册COM组件。 你应该能够再找到下HKEY_CLASSES_ROOT \ CLASSID则使用GUID,根据该InprocServer32的文件夹将有路径到您的DLL。 这是COM如何查找该DLL。



Answer 3:

我认为,这里的问题是,你有没有产生你的.NET组件类型库。 我知道你说你使用regasm - 但是你使用正确的命令行?

  • 开始菜单 => 程序 => Microsoft .NET框架SDK VX.Y => SDK命令提示符
  • 在此命令行行键入:regasm /tlb:Mydll.dll


文章来源: How do I properly register the Type Library of A VB.NET COM+ Component?
标签: vb.net vb6 com+