1

我对 VB.net 很陌生。我以前在 VB6 中编写过这些对象。我只是迷失在 VB.net 中,但是(踢和尖叫)我必须学习如何做到这一点。我已经用谷歌搜索了几个小时,只向前迈出了一小步。任何人都可以发布一个链接来解释从头到尾如何做到这一点?

我已经设法编写了类对象,但我不知道如何注册它以及 CreateObject("Name1.Name2") 中的 name1 和 name2 来自哪里。

Regsrv32 将不起作用。它说“找不到入口点”并且不会注册它。另外,我不能把它放到 Assemblies 目录中。我读了一些关于使用 regasm 命令的内容,但我似乎也无法完成这项工作。

提前感谢您的任何帮助。

4

3 回答 3

2

我将假设您不是要编写 COM DLL,而是要编写一个完整的项目,该项目调用各种子程序集,例如 VB6 EXE 调用 ActiveX DLL。如果您可以更具体地说明您要做什么,那将对我有更好的帮助。

关于 VB.NET 与 VB6 的几点。

1) 对于仅 .NET 的项目,没有注册。如果 EXE 或 DLL 引用另一个 .NET DLL,则唯一的要求是 DLL 必须存在于父目录中。

2) 您只能通过在 GAC 中注册 .NET 程序集来为 .NET 应用程序进行 COM 样式注册。但是,这样做有几个要求。在 .NET GAC 上进行搜索,它将为您提供有关如何执行此操作的独家新闻。

3) 您可以设置 .NET 程序集以使用 COM,在这种情况下,它将按照 COM 规则运行,包括向 regsvr 注册。

您会发现#2 或#3 仅在极少数情况下出现的.NET 项目。#1 将适用于 90% 的 DLL 程序集。这取决于你的项目。

CreateObject 的一个常见用途是允许插件或可安装库。.NET 通过反射 API 处理这个问题。使用反射 API,您可以查看目录、浏览每个 .NET DLL 并查看它们的内容并根据您找到的内容创建对象。搜索 .NET Reflection 以了解此内容。

如果您的项目只是 .NET,那么我建议您创建一个由主程序集和定义您正在创建的对象的接口的单个​​子程序集引用的程序集。当您使用反射 API 并确定对象类型时,您可以将其分配给该接口的变量,并使用智能感知和其他辅助工具对其进行正常编码。

如果您有旧的 COM ActiveX 控件或 DLL,.NET 将生成一个将 ActiveX 对象公开给 .NET 的包装类。我会花一些时间学习 .NET 如何做到这一点。我所做的是创建一个虚拟项目并让 .NET 引用我需要的 ActiveX 内容。然后我找到它制作的包装器项目和 DLL,并将它们移动到中心区域。这就是为什么当我使用相同的 ActiveX 东西处理后续项目时,我知道所有包装器在哪里。

于 2008-11-10T13:25:24.917 回答
1

您必须转到您的类库属性并选择“注册 COM 互操作”选项。这将使您的程序集可用于 COM。

于 2008-11-09T17:23:36.963 回答
-1

您想为您的 .NET 组件创建所谓的COM 可调用包装器(又名 CCW)。这基本上需要使用一些 GUID 设置一些 COM 接口,并在项目属性中启用“注册 COM 互操作”(如前所述)或使用 regasm.exe。

于 2008-11-09T18:49:50.987 回答