如何将用户定义的结构转换为 C++ 中的变体?

How to convert user-defined struct to variant in c++?

我在原生c++中有一个struct,应该传递给一个COM对象;两者共享相同的头文件,因此 COM 对象和我的代码之间的结构定义没有区别。 COM 方法需要一个指向 struct 的指针作为参数。我可以将 int、float、string 等类型作为参数传递给 COM,方法是将它们转换为 variant_t vtArg(myIntValue).

等变体

如何将 struct 转换为变体?

COM方法的签名是这样的:

bool ComMethod(HANDLE *myHandle, MyStruct *myStruct)

这是我为 COM 方法构造参数的方式:

SAFEARRAY *pMethodArgs = SafeArrayCreateVector(VT_VARIANT, 0, 2);
LONG index = 0;    
SafeArrayPutElement(pMethodArgs, &index, &myHandle);
index = 1;
SafeArrayPutElement(pMethodArgs, &index, &myStruct);

我尝试了多种方式,发现无法将MyStruct作为参数发送。我使 COM 方法 return 成为 MyStruct 的一个实例,并试图在 C++ 中对 return 值进行逆向工程,但不幸的是,在 C++ 中没有收到任何东西。

解决方案是使用结构的各个成员创建 SAFEARRAYVARIANT,或者将各个成员作为单独的参数传递。