如何将用户定义的结构转换为 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++ 中没有收到任何东西。
解决方案是使用结构的各个成员创建 SAFEARRAY
个 VARIANT
,或者将各个成员作为单独的参数传递。
我在原生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++ 中没有收到任何东西。
解决方案是使用结构的各个成员创建 SAFEARRAY
个 VARIANT
,或者将各个成员作为单独的参数传递。