【问题标题】:Using VS 2008 (vb.net) I need to create an object I can use in Classic ASP with CreateObject使用 VS 2008 (vb.net) 我需要创建一个可以在经典 ASP 中使用 CreateObject 的对象
【发布时间】:2010-09-21 12:39:43
【问题描述】:

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

类对象我已经写好了,不知道怎么注册,CreateObject("Name1.Name2")中的name1和name2是从哪里来的。

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

提前感谢您的帮助。

【问题讨论】:

    标签: vb.net visual-studio-2008 com interop createobject


    【解决方案1】:

    我将假设您不是要编写 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 东西处理后续项目时,我知道所有包装器在哪里。

    【讨论】:

    • 您确实不必必须安装到 GAC 中以进行互操作。 Regasm 与代码库开关将允许您放置在 GAC 之外。
    • 我不是在谈论 COM 互操作。但是.NET 可以共享程序集的不同方式。您假设提问者在谈论 COM。我的回答不是假设而是关注 .NET 共享程序集的多种方式。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-12
        • 1970-01-01
        • 2011-05-31
        • 1970-01-01
        • 2011-06-23
        • 2010-11-25
        • 1970-01-01
        相关资源
        最近更新 更多