如何在 XLOPER 和 VARIANT 之间编组?

发布于 2024-10-08 14:07:16 字数 1539 浏览 5 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

花开半夏魅人心 2024-10-15 14:07:16

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

I had to hand-roll my own marshalling code for this. There were no freely available libs to handle this. XLW is meant for wrapping your entire plugin - this was not an option for me.

In the end, it just took a lot of time, looking through the documentation for xloper and variant, and figuring out how to map them to each other.

For the curious:

arrays in xloper(12):

  • .xltype is xltypeMulti
  • .val.array is a pointer to an array of xlopers.

arrays in variant:

  • .vt is VT_ARRAY | VT_VARIANT
  • .parray is a SafeArray of variants

other tips with this marshalling:

  • xltypeRef and xltypeSRef: use xlCoerce to look up actual cell values.
  • integer values run the risk of overflow. boost::numeric_cast helps with that.
  • string marshalling is annoying. xloper uses char, xloper12 uses wchar, variant uses bstr.
  • Remember to free the buffers you allocate for your new xloper strings. Use xlbitDLLFree and xlAutoFree(12) accordingly.
  • Template programming is useful for the xloper/xloper12 issue. Boost helps. _bstr_t also helps.
爱你是孤单的心事 2024-10-15 14:07:16

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

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

以及其他我不知道的内容

I use XLL Plus (costs)
http://www.as-ltd.co.uk/xllplus/default.htm

There is also XLW (opensource)
http://xlw.sourceforge.net/

and probably others I am not aware of

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文