如何在 XLOPER 和 VARIANT 之间编组? [关闭]

2024-04-16

我正在开发一个 Excel 插件 (XLL),它与 ​​COM 对象进行通信。所以,我必须在 XLOPER 和 VARIANT 之间进行编组。我已经完成了大部分工作,但数组绝对是一个痛苦。我需要支持一维和二维数组。

我想以前已经有人处理过这个问题了。简化处理 VARIANT、SAFEARRAY 和 XLOPER(以及 XLOPER12)的最佳方法是什么?


我必须为此手动编写自己的编组代码。没有免费可用的库来处理这个问题。 XLW 旨在包装整个插件 - 这对我来说不是一个选择。

最后,只是花了很多时间,浏览 xloper 和variant 的文档,并弄清楚如何将它们相互映射。

对于好奇的人:

xloper(12) 中的数组:

  • .xltype 是 xltypeMulti
  • .val.array 是指向 xlopers 数组的指针。

变体中的数组:

  • .vt 是 VT_ARRAY | VT_VARIANT
  • .parray 是变体的 SafeArray

有关此编组的其他提示:

  • xltypeRef 和 xltypeSRef:使用 xlCoerce 查找实际单元格值。
  • 整数值存在溢出的风险。boost::numeric_cast对此有帮助。
  • 字符串编组很烦人。 xloper 使用 char,xloper12 使用 wchar,variant 使用 bstr。
  • 请记住释放为新 xloper 字符串分配的缓冲区。相应地使用 xlbitDLLFree 和 xlAutoFree(12)。
  • 模板编程对于 xloper/xloper12 问题很有用。提升有帮助。 _bstr_t 也有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 XLOPER 和 VARIANT 之间编组? [关闭] 的相关文章

随机推荐

  • Spring Batch - 提交间隔的后期绑定不适用于跳过策略

    我正在尝试对块的提交间隔属性使用后期绑定 当块不包含跳过策略或重试策略时 它可以正常工作 但是一旦添加了跳过策略 甚至是重试策略 就不会考虑提交间隔并且批处理就像提交间隔设置为 1 一样工作 奇怪的是 当提交间隔被硬编码时 它工作得很好 所
  • 枚举上忽略 JSON 绑定 @JsonbTypeDeserializer 注释?

    我正在将 JAXB 应用程序转换为JSON B http json b net docs user guide html我在尝试使用自定义反序列化 Java 枚举时遇到了问题JsonbDeserializer在我的一项测试中 我需要反序列化
  • 克隆后如何删除原始元素?

    HTML div p class test1 test 1 p p class test2 test 2 p p class test3 test 3 p p class test4 test 4 p div div class click
  • ActionMailer 不在开发 Rails 4 中发送邮件

    为什么这个邮件程序不发送任何邮件 或者有什么调试的想法吗 在 my app config environments development rb 中 我有以下代码 config action mailer delivery method s
  • 如何获取 Oid 的名称(#Snmp)?

    好的 按照建议Lex Li https stackoverflow com users 11182 lex li我尝试使用其他库获取 Oid 名称 SnmpLib http sharpsnmplib codeplex com 这里是示例 p
  • 网络响应超时错误 (create-react-native-app) (expo)

    我正在尝试在 android 中的 expo 应用程序上运行 create react native app 首先 我通过编写命令创建了项目 创建反应本机应用程序测试 然后我执行了 npm 启动 然后从expo应用程序扫描二维码 但扫描二维
  • Spring Boot Mongodb 按 ID 搜索返回 null

    我用 mongodb 创建了一个 Spring Boot 项目 当我将数据插入集合时 它会被插入 但是当我尝试从中获取数据时findOne by id基于 id 的插入值总是返回 null 我在下面给出了我的模型类和插入方法 请告诉我出了什
  • 如何在 DLL 上使用 app.config 而不是 exe

    这是一个姐妹问题以及我的第一个问题允许使用 NET 2 0 构建的 C 应用程序在 NET 4 0 4 5 上运行 https stackoverflow com questions 13461185 allow c sharp appli
  • Selenium - 在检查 HTML 之前找不到可见元素?

    我目前正在使用 Selenium 进行网络爬虫应用程序 在几个成功的模块之后 以下情况让我陷入困境 我试图找到 菜单 类的一个元素 其文本 报告 位于名为的框架内 框架 应用 很简单 对吧 应该很简单 browser webdriver C
  • 扫描仪双值 - InputMismatchException

    我尝试以最简单的方式使用扫描仪 Code double gas efficiency distance cost Scanner scanner new Scanner System in System out print Enter th
  • MongoDB更新数组的多条记录[重复]

    这个问题在这里已经有答案了 我最近开始使用 MongoDB 并且有一个关于更新文档中的数组的问题 我得到这样的结构 id ObjectId post comments user test avatar static avatars asd
  • 实体框架级联删除问题-外键设置为空

    我有以下使用实体框架映射的模型 Mitglied gt Auftrag gt Teilprojekt 我已经用外键和 删除级联 设置了数据库中的所有内容 如果我对数据库执行一些测试 一切都会正常 当我使用实体框架添加尤其是删除对象时 问题就
  • 生成 PDF 格式的 Crystal 报告...如何在新选项卡或页面中打开?

    我编写了一段代码来生成 PDF 格式的 Crystal Reports 报告 但是它在用户进行搜索并单击按钮的同一页面中打开 有什么方法可以在新选项卡或页面中打开 PDF 我的代码是 private void OpenPDF ReportD
  • Word 2007 VBA - 使一些文本变为粗体和其他斜体

    我有以下代码 用于从 Excel 单元格中选择数据并替换 Word 文档中的特定文本 出于此问题的目的 Excel 单元格已替换为纯文本字符串 数据 转到 是恒定的 那么数据 aaa bbb 可以是任何内容 直到我们到达 of 它也是恒定的
  • Idris - 在 n 维向量上映射操作

    我在 Idris 中定义 n 维向量如下 import Data Vect NDVect Num t gt rank Nat gt shape Vect rank Nat gt t Type gt Type NDVect Z t t NDV
  • 如何在 Luigi 中启用动态需求?

    我在 Luigi 中构建了一个任务管道 由于该管道将在不同的上下文中使用 因此可能需要在管道的开头或结尾包含更多任务 甚至任务之间的依赖关系完全不同 就在那时我想 嘿 为什么要在我的配置文件中声明任务之间的依赖关系 所以我在 config
  • 抽象类、接口和自动装配

    我有以下主要课程 public class Startup implements UncaughtExceptionHandler Autowired private MessageListener messageListener priv
  • 如何清空字符数组?

    有一个像 char Members 255 这样的字符数组 如何在不使用循环的情况下完全清空它 char members 255 我所说的 空 是指如果它存储了一些值 那么它就不应该 例如 如果我执行 strcat 那么旧值不应保留 mem
  • 手动合并拉取请求

    所以我在github上有以下情况 我从创建了一个新分支mainbranch并命名为userstory1 我在分支中推送了我的更改userstory1并向我的同事提出了拉取请求 他发现文件夹结构不正确 因此将我的代码文件夹重命名为mainbr
  • 如何在 XLOPER 和 VARIANT 之间编组? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个 Excel 插件 XLL 它与 COM 对象进行通信 所以 我必须在 XLOPER 和