我怎样才能在XLOPER和VARIANT之间?

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

我想有人已经不得不面对这个。 有没有一些库可以简化这个? 有处理VARIANT,SAFEARRAY和XLOPER(和XLOPER12)的好工具吗?

我不得不手动推出我自己的编组代码。 没有免费的库来处理这个问题。 XLW是为了包装你的整个插件 – 这不是我的select。

最后,它花了很多时间,查看了xloper和variant的文档,并弄清楚了如何将它们映射到对方。

对于好奇:

xloper中的数组(12):

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

变体中的数组:

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

与这个编组的其他技巧:

  • xltypeRef和xltypeSRef:使用xlCoerce来查找实际的单元格值。
  • 整数值有溢出的危险。 boost::numeric_cast帮助。
  • string编组令人讨厌。 xloper使用char,xloper12使用wchar,变体使用bstr。
  • 记住要释放为新的xloperstring分配的缓冲区。 相应地使用xlbitDLLFree和xlAutoFree(12)。
  • 模板编程对xloper / xloper12问题很有用。 助力帮助。 _bstr_t也有帮助。

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

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

也可能是其他人我不知道