Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何正确注册VB.NET COM的类型库+;组件?_Vb.net_Vb6_Com+ - Fatal编程技术网

如何正确注册VB.NET COM的类型库+;组件?

如何正确注册VB.NET COM的类型库+;组件?,vb.net,vb6,com+,Vb.net,Vb6,Com+,我希望将旧版VB6 COM+组件升级为VB.NET组件。我似乎已经升级了一个名为EventPackage的类,它有一个类IEventListener。另一个是TradeOrders,实现EventPackage.IEventListener。在尝试构建TradeOrder时,我收到以下错误/警告 无法加载引用“EventPackage”的类型库。图书馆未注册。(HRESULT的例外情况:0x8002801D(类型_E_LIBNOTREGISTERED)) 找不到引用的组件“EventPackag

我希望将旧版VB6 COM+组件升级为VB.NET组件。我似乎已经升级了一个名为EventPackage的类,它有一个类IEventListener。另一个是TradeOrders,
实现EventPackage.IEventListener
。在尝试构建TradeOrder时,我收到以下错误/警告

  • 无法加载引用“EventPackage”的类型库。图书馆未注册。(HRESULT的例外情况:0x8002801D(类型_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>
    
    
    {0D76C094-21A6-4E04-802B-6E539F7102D7}
    0
    2.
    0
    tlbimp
    
    在注册表中搜索此Guid时,未找到任何内容。当为类似的COM+对象使用GUID时,我在
    HKEY\U CLASSES\U ROOT\CLSID\{…}\TypeLib
    (“..”是另一个组件的GUID)中找到它们。当我转到与EventPackage.IEventListener对应的注册表项名称时,我发现没有
    \TypeLib
    子项。正如您可能怀疑的那样,在注册表中搜索“0D76C094-21A6-4E04-802B-6E539F7102D7”不会产生任何结果

    所以我知道这一定是一个注册表问题,但我似乎已经尝试了我找到的每一个谷歌结果。我试过Regasm和regsvcs.exe,但没有用。很多页面都告诉我,将dll拖到COM+管理器应该会自动注册组件

    那么如何注册类型库呢

    有关如何制作EventPackage COM+组件的详细信息
  • 运行VB6->VB.NET向导
  • 然后,我在assemblyinfo.vb文件中添加了一些行

  • 添加了导入系统.企业服务的
  • 添加了导入系统.企业服务的
  • 导入System.Data.SqlClient
  • 用于强名称
  • (其中“…”是旧组件的COM+CLSID)
  • 我在类文件IEventListener.VB中添加了以下内容

  • 导入系统.企业服务
  • (其中…是正确的COM+CLSID,这是唯一的参数)
  • 继承ServicedComponent
  • 将转换向导生成的ID更改为正确的值(从
    我昨天遇到了dam错误(0x8002801D(TYPE_E_libnotregisted)),这让我抓狂:

    这可能是在转移视线,但我的回答中有关于注册密钥不存在的类似细节,等等:


    右键单击Visual Studio(2010)>以管理员身份运行>打开项目>编译!控制台命令“regsvr32 mydll.dll”将注册您的COM组件。然后您应该能够在HKEY_CLASSES_ROOT\CLASSID下找到guid,InprocServer32文件夹将在该guid下具有指向您的dll的路径。COM就是这样查找dll的。

    我认为这里的问题是您尚未为.NET组件生成类型库。我知道您说过您使用但是你使用了正确的命令行吗

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

    我使用的是Windows XP,Visual Studio 2008。以管理员身份运行。我已选中“注册COMInterop”。因此,当我第一次遇到错误时,我说“错误RA0000:未指定任何输入文件。然后我尝试了
    regasm EventPackage.dll/tlb:EventPackage.dll
    。这导致了错误
    错误RA0000:保存导出的类型库时出错:访问被拒绝。(HRESULT的异常:0x80070005(E_ACCESSDENIED))
    。我已尝试删除旧tlb,停止iis,关闭所有dev/ie/iis工具,但错误持续。我正在获取错误
    EventPAckage.dll,但未找到DllRegisterServer入口点。无法注册此文件。
    。我正在查找其他StackOverflow问题以解决此问题。