Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。












想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。

5年前关闭。



Improve this question




我正在研究与COM对象进行通信的Excel插件(XLL)。因此,我必须在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也有帮助。
  • 关于c++ - 如何在XLOPER和VARIANT之间进行编码? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4514679/

    10-13 00:33