如何在c ++中将用户定义的struct转换为variant?

时间:2016-08-02 11:35:28

标签: c++ struct com variant

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

如何将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);

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

  $messages = [
        'first_name.required' => 'Has de introducir un nombre'
        'email.required' => 'Has de introducir un correo'
    ];

1 个答案:

答案 0 :(得分:0)

我尝试了多种方法,发现无法将MyStruct作为参数发送。我让COM方法返回MyStruct的实例并试图在C ++中对返回值进行反向工程,但遗憾的是在C ++中没有收到任何内容。

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