【发布时间】:2011-08-02 13:23:17
【问题描述】:
我正在尝试传递一个结构 e。 g.:
struct SVec3
{
public:
float X;
float Y;
float Z;
};
到 _variant_t 中,将其存储在 SAFEARRAY 中。我的方法是首先创建一个实例:
SVec3 rot;
rot.X = 0.1f;
rot.Y = 0.65f;
rot.Z = 0.01f;
然后我通过引用将它放入 _variant_t
_variant_t var((IUnknown*)&rot, true);
并将其存储在 SAFEARRAY 中:
LONG index = 0;
SAFEARRAY* psaArgs = SafeArrayCreateVector(VT_VARIANT, 0, 1);
SafeArrayPutElement(psaArgs, &index, &var); // This throws a memory access exception.
那么我的错误是什么?还有其他方法吗?如果是这样,我应该如何将这些结构的 SAFEARRAY 传递给 SAFEARRAY?有没有通用的方法?或者我是否缺少像 Recorddescription 这样的东西,因为这样 SAFEARRAY 不包含数据,它包含指向数据的指针。但是如何将数据存储在 SAFEARRAY 中?
问候尼姆
【问题讨论】:
-
我还没有尝试过,但是查看MSDN 看起来您可能希望类型为
VT_ARRAY | VT_R4。 -
这里不能绕过 VT_RECORD 和 IRecordInfo。已经有足够的链接汤,但规范的 MSDN 库页面在这里:msdn.microsoft.com/en-us/library/ms221453%28v=VS.85%29
-
为什么不将它存储为 3 个元素的 SAFEARRAY,每个元素都是一个浮点数?
标签: c++ struct variant safearray