gpt4 book ai didi

.net - COM 接口(interface)问题 - .NET

转载 作者:行者123 更新时间:2023-12-04 07:08:17 25 4
gpt4 key购买 nike

最近我正在阅读有关互操作编码的内容,但我仍然不明白一件事。为了使 .NET 程序集对 COM 可见,我需要使用 tlbexp 工具和/或 regasm 工具。为了使 COM 对 .NET 组件可见,我必须使用 tlbimp 工具——这一切对我来说都很清楚。

  • 除此之外,我在互联网上看到了很多处理具有 guid 属性、IUnknown 和 IDispach 的 COM 接口(interface)的代码。

  • 我的问题是所有这些与 COM 有什么关系——我需要使用它吗?我正在准备认证,但他们没有说任何关于接口(interface)、指南、IUnknown 等的信息……

    我真的不喜欢留下不清楚的东西,所以如果有人可以向我解释一下,我将非常感激。
  • 我还有一个关于从 COM(tlbimp 工具)导入的类型库的问题。从 COM 导入的类型库是否还需要在系统中注册 COM 对象?

  • 亲切的问候
    PK

    最佳答案

    我不知道为什么有人反对这个问题。对我来说,这似乎是一个完全正确的问题;也许他们今天早上还没有喝咖啡。

    您似乎在问 GUID、IUnknown 和 IDispatch 与 COM 有什么关系。我将尝试做一个简短的调查。

    每个 COM 组件都公开一个公共(public)接口(interface) IUnknown。 IUnknown 有 AddRef()、Release() 和 QueryInterface() 方法。 AddRef() 和 Release() 用于支持引用计数,因此当对对象的每个引用都被释放时,该对象将被销毁。 QueryInterface() 有点像 COM 版本的 C++ 中的 dynamic_cast<> 运算符。客户端代码使用它来查看他们拥有的 IUnknow 指针是否实际上指向另一个类型的对象,例如 IDog、ICat 或其他类型的对象。

    所以每个 COM 组件都必须实现 IUnknown,但大多数 COM 库会自动为您实现这一点,因此当您编写 COM 代码时,您通常不必编写任何代码来获取 IUnknown;你免费得到它。

    GUID 有点像指纹。就像现实生活中两个人可以有完全相同的名字一样,在 COM 中两个 COM 组件也可以有相同的名字。例如,您可以有 2 个库都实现了 IDog 接口(interface),但它们可能会做完全不同的事情。但是,您仍然应该能够在您的机器上安装这两个库,并且区分这两者是 GUID 的用途。 GUID 是一个全局唯一标识符,这意味着当您生成一个时,理论上地球上任何其他时间点上的其他人都无法创建相同的 GUID。因此,除了名称之外,每个 COM 对象(以及 coclass 和库等)都有一个 GUID。

    IDispatch 是另一个类似于 IUnknown 的基本接口(interface),但与每个 COM 对象都需要的 IUnknown 不同,IDispatch 是可选的,并提供许多但不是所有 COM 对象都支持的特殊功能。诸如支持某些语言功能并使您的对象更易于客户使用之类的事情。大多数(可能)COM 对象都暴露了这个接口(interface)。

    关于 COM 库;是的,它们必须在 Windows 中注册。

    关于.net - COM 接口(interface)问题 - .NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/765768/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com