gpt4 book ai didi

c++ - 如何将自定义结构传递到 C++(非 CLI)中的 _variant_t?

转载 作者:行者123 更新时间:2023-11-30 03:06:09 24 4
gpt4 key购买 nike

我正在尝试传递一个结构 e。例如:

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 中呢?

问候尼姆

最佳答案

您正在将 SVec3 指针转换为指向 IUnknown 接口(interface)的指针。您的数据结构是一种简单的数据类型,而不是实现 IUnknown 的成熟类。因此,一旦 Windows 尝试调用 IUnknown 上的方法,您的应用程序就会中断。

一些快速的谷歌搜索揭示了一些可能对变体和用户定义类型有用的链接:

您必须从将 UDT 放入类型库开始...

关于c++ - 如何将自定义结构传递到 C++(非 CLI)中的 _variant_t?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6912784/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com