7

我有一个用 .Net 编写的类库,我想将它提供给 VB6/VBA。我试过的没有用(显然我在问这个问题)。这是我所做的:

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

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

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

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

4

4 回答 4

10

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

于 2010-07-27T18:29:18.353 回答
3

您需要为您的接口定义 GUID 并标记哪些类实现了哪些接口才能启动。MSDN 有一个入门指南。您不需要运行 RegSvr32,但您确实需要将 DLL 放在应用程序可以找到它的位置

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

这里也有对整个过程的一个很好的概述。

于 2010-07-27T18:30:00.910 回答
0

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

于 2010-07-27T18:24:28.923 回答
0

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

于 2015-01-29T14:43:18.907 回答