使DLL COM可访问

时间:2010-07-27 18:20:27

标签: .net vb.net com vb6 vb6-migration

我有一个用.Net编写的类库,我想提供给VB6 / VBA。我尝试过的东西不起作用(显然我在问这个问题)。这是我做的:

  1. 我在Visual Studio 2010 Express中创建了一个类库项目,并将代码放在一个类模块中。
  2. 我打开了项目属性并转到“装配信息”并选中“使COM可见”。
  3. 我选择了“高级编译”选项并针对.Net 2.0(这是非常简单的代码)。
  4. 然后我删除了对“System”的所有引用。
  5. 我构建了项目(没有警告或错误)并将DLL从Bin文件夹复制到C:\ Windows \ System32 \
  6. 我运行RegSvr32注册DLL并收到错误:
  7.   

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

         

    确保“MyDll.dll是有效的DLL或OCX文件,然后重试。

    显然,我的第一次尝试有点天真。有人可以提供指导吗?

4 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:3)

您需要为接口定义GUID,并标记要启动哪些类实现哪些接口。 MSDN有一个getting started guide。您不需要运行RegSvr32,但是您需要将DLL放在where the app can find it的某个位置:

  

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

对整个过程here也有很好的概述。

答案 2 :(得分:0)

我相当肯定RegSvr32只适用于非.NET DLL。 .NET程序集存储在全局程序集缓存(GAC)中。您必须运行gacutil.exe。

答案 3 :(得分:0)

使用GacUtil而不是RegSvr32。 RegSvr用于使用VB6制作的dll,对于.NET DLL,您需要使用GacUtil,因为它被添加到全局程序集缓存中。