我如何在XLOPER和VARIANT之间进行编组?

时间:2010-12-22 23:32:39

标签: c++ excel marshalling variant safearray

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

我想有人已经不得不在此之前解决这个问题了。简化处理VARIANT,SAFEARRAY和XLOPER(以及XLOPER12)的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

我必须为此手动滚动我自己的编组代码。没有免费提供的库来处理这个问题。 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也有帮助。

答案 1 :(得分:0)

我使用XLL Plus(费用) http://www.as-ltd.co.uk/xllplus/default.htm

还有XLW(开源) http://xlw.sourceforge.net/

可能还有其他人我不知道