我怎样才能在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/
也可能是其他人我不知道