代码之家  ›  专栏  ›  技术社区  ›  Oorang

使DLL COM可访问

  •  7
  • Oorang  · 技术社区  · 15 年前

    我有一个用.Net编写的类库,我想将它提供给VB6/VBA。我所尝试的没有起作用(很明显,当我问这个问题时)。以下是我所做的:

    1. 我打开项目属性,转到“程序集信息”并选中“使COM可见”。
    2. 我选择了“高级编译”选项和目标.NET2.0(这是非常简单的代码)。
    3. 然后我删除了除“System”之外的所有引用。
    4. 我构建了这个项目(没有警告或错误),并将DLL从Bin文件夹复制到C:\Windows\System32中\
    5. 我运行RegSvr32来注册DLL,并得到错误:

    已加载模块“MyDll.dll”,但找不到入口点DLLRegisterServer。

    显然,我的第一次尝试有点幼稚。有人能提供指导吗?

    4 回复  |  直到 15 年前
        1
  •  10
  •   Hans Passant    15 年前

    第六步错了。具有[ComVisible]类型的NET程序集已向Regasm.exe注册。如果不想将DLL安装到GAC中,请使用/codebase命令行选项。/tlb命令行选项创建类型库,您可以在VB6项目中使用它。

        2
  •  3
  •   dsolimano    15 年前

    您需要为接口定义guid,并标记哪些类实现哪些接口。MSDN有一个 getting started guide . 您不需要运行RegSvr32,但需要将DLL放在某个地方 where the app can find it :

    使用Regasm.exe注册程序集后,可以将其安装在全局程序集缓存中,以便可以从任何COM客户端激活该程序集。如果程序集仅由单个应用程序激活,则可以将其放置在该应用程序的目录中。

    整个过程也有一个很好的概述 here .

        3
  •  0
  •   user195488 user195488    15 年前

        4
  •  0
  •   Joseph vNext    10 年前

    使用GacUtil代替RegSvr32。RegSvr用于用VB6生成的dll,对于.NET dll,您需要使用GacUtil,因为它被添加到全局程序集缓存中。