为什么公共字段和属性可以互换二进制兼容?

2023-12-31

在日常工作中,我开发一个 VB6(我知道,但不要嘲笑这个受苦的人……)应用程序,该应用程序使用了我们编写的许多库(也在曾经杰出的 VB6 中)。其中一个支持库有大量通过公共属性公开的私有成员,我被要求删除这些属性,并将私有成员变量提升到与原始属性同名的公共字段中。

现在,我不是 COM 专家,但我的印象是类中的每个公开项目都有它自己的 GUID。由于我们将从每个值从 2 个 Guid(Property Get 和 Property Let)变为仅使用一个(公共字段)的情况,我预计这会破坏二进制兼容性 - 但似乎并没有没有这样做。

谁能解释为什么?


No, it hasn't破坏了兼容性,因为它hasn't删除了 property get 和 property let 方法。只是编译器现在正在为您编写它们。

这难道不是 VB6 可以说的少数几个领域之一吗?better比.Net?

  • 在 .Net 中,公共字段的行为与公共属性不同,这使一些重构变得困难并导致混乱 https://devblogs.microsoft.com/vbteam/properties-vs-fields-why-does-it-matter-jonathan-aneja/.
  • 在 VB6 中,公共字段的行为与公共属性完全相同,这就是为什么可以在不影响二进制兼容性的情况下进行切换。编译器在幕后产生 https://learn.microsoft.com/en-us/previous-versions/visualstudio/visual-basic-6/aa716305(v=vs.60)公共字段的属性获取和设置例程。从某种意义上说,VB6已经自动实现了属性(现在做广告的 https://learn.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/dd293589(v=vs.100)作为 VB10 中的“新功能”)...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么公共字段和属性可以互换二进制兼容? 的相关文章

  • Windows 关闭时,VB 6.0 系统托盘应用程序无法正常关闭

    我在 VB 6 0 应用程序中使用以下代码来为应用程序提供系统托盘图标 Option Explicit user defined type required by Shell NotifyIcon API call Public Type
  • 为不存在的文件创建 IShellItem 实例

    我怎样才能获得外壳项目 http msdn microsoft com en us library bb761144 aspx不存在的文件 或目录 的对象 SHCreateItemFromParsingName http msdn micr
  • Linux世界中最接近Windows COM/DCOM的是什么?

    还有比管道 套接字更高级别 更全面的东西吗 对于进程间通信 D Bus http www freedesktop org wiki Software dbus是标准的更高级别机制 GTK 和 Qt 都具有 D Bus 绑定 大多数桌面环境
  • SQL Server 中 COMB GUID 处的时间戳为 8 个字节或时间戳为 6 个字节

    感谢精彩的文章 我们有 COMB GUID 根据目前的实施情况 有两种方法 使用最后 6 个字节作为时间戳 GUID作为多个数据库下的快速主键 http www codeproject com Articles 388157 GUIDs a
  • 使用 script/api 更改组件服务 > COM 安全中的访问权限?

    是否有一个 api 可以更改 COM 安全的访问权限 我需要将新值写入 编辑限制 和 编辑默认值 这些是普通的注册表设置吗 找不到如何设置这些条目 快速答案是是 它们是注册表设置 长答案是否 它们不是simple注册表设置 这些值是二进制的
  • 如何从 C# 等托管代码中使用 ActiveX 组件的嵌入式免注册清单?

    我想使用未在系统或用户范围内注册的特定版本的 ActiveX 组件 如果我使用清单文件 一切都会按预期工作 但是 嵌入式清单仅适用于 C 客户端代码 这是依赖声明
  • 允许连接到完整性级别不匹配的 .NET COM 服务器

    我在基于 COM 的客户端 服务器设置方面遇到问题 COM 服务器是用 C NET 4 0 编写的 并作为 注册的 本地服务器运行 根据连接到服务器的应用程序 其他客户端将收到服务器执行失败 HRESULT 异常 0x80080005 CO
  • 在 Win 10 中调试卸载 DLL 时发生崩溃,但在 Win 7 中则不然

    不完全确定我已经解决了这个问题 但这就是我所看到的和我所看到的think正在进行 我有一个主要用 C 编写的 Win32 程序 用于加载 C DLL 该 DLL 通过 COM 对象 可能由 DLL 本身实例化的对象 将数据从 C 程序传递到
  • C# 中 System.String[*] 和 System.String[] 的区别

    Edit 我知道 C 相当于For Each server As String In servers is foreach var item in servers 但是由于GetOPCServers返回对象 应该将其转换为可迭代类型 我正在
  • VB6 类有析构函数吗?

    当我执行诸如以下的语句时 Set MyObject Nothing 类中是否有一个被调用的特定函数 即我可以用作析构函数 来执行诸如清理数组 与数据库断开连接等操作 类似于Class Initialize 构造函数 还有一个析构函数 Sub
  • TypeScript GUID 类? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道在 TypeScript 中像 GUID UUID 这样的 C 的良好 可靠的实现吗 我自己可
  • 在 C# 中使用 VB6 字符串数组

    我有 旧的 VB6 代码 我想从 C 代码中使用它 这有点类似于这个问题 https stackoverflow com questions 23507416 passing string array from vb6 to c net 但
  • VT_DATE 类型的微秒支持

    VT DATE 变体类型是否支持微秒分辨率 请告诉我如何在VB中显示相同的内容 http msdn microsoft com en us library ms221646 aspx http msdn microsoft com en u
  • 如何将现有的窗体添加到 vb6 项目中?

    我的 vb6 项目中有一个表单 Search frm 我想添加具有不同名称 SearchNew frm 的相同表单 我复制了表单 Search frm 并重命名为 SearchNew frm 并尝试添加到项目中 但它给我一个错误 Searc
  • 创建仅包含枚举的 COM 库时出现问题

    我正在做一个 COM 互操作项目 用 C 和 NET Interop 替代一些 VB 和 C ATL COM 项目 当我在 NET 中定义枚举并将它们设为 ComVisible 时 它 们会公开为 Typelib EnumType Enum
  • 基于非零的多维数组

    我正在使用以下命令从电子表格中提取单元格Interopt ExcelAPI 当我打电话时 object rangeValues object range get Value XlRangeValueDataType xlRangeValue
  • 调试错误:在 vc++ 项目中使用 COM 时发生 所需的运行时?

    我为我的工作创建了一个 COM 组件 我也注册了该组件 在我的系统上 我有两个虚拟机工作站 在我的第一个工作站中 它运行良好 在我的第二个工作站中 它显示一个包含消息的错误框该程序需要一段时间并以不寻常的方式关闭 请联系应用程序管理员 我认
  • .NET WebBrowser 控件可以使用 IE9 吗?

    我意识到这是一个早期版本并且不稳定 我不会梦想在任何其他项目中将默认的 Web 浏览器控件替换为 IE9 但在这种情况下 我特别需要 IE9 与其他版本进行比较 我想让 NET WebBrowser 控件使用 IE9 而不是机器上默认版本的
  • 使我的 COM 程序集调用异步

    我刚刚 赢得 了在当前工作中维护用 C 编码的遗留库的特权 这个dll 公开使用 Uniface 构建的大型遗留系统的方法 除了调用 COM 对象之外别无选择 充当此遗留系统与另一个系统的 API 之间的链接 在某些情况下 使用 WinFo
  • 使用 pythoncom 在 Python 进程之间编组 COM 对象

    我希望有人可以帮助我从 Python 进行编组跨进程调用到 Excel 我有一个通过 Python 启动的 Excel 会话 我知道当需要从单独的 Python 进程访问它时 该会话将会启动并运行 我已经使用编组让一切按预期工作CoMars

随机推荐