如何将.NET字符串编组为COM调用的变量

时间:2009-10-08 16:25:25

标签: c# com interop marshalling variant

我正在使用C#中的第三方COM库。

有get / set方法采用VARIANT类型的参数(类型VT_BSTR)。 在.NET包装器中,这些参数显示为类型object,即

object getValue();
void setValue( object val );

getValue方法工作正常,我执行对象的简单转换以输入字符串:

string str = (string)comObject.getValue();

但是以类似的方式设置字符串不会:

string str = "test";
comObject.setValue( str );

第三方库不喜欢这样并生成异常。它必须期望VT_BSTR类型的VARIANT(因为它适用于本机C ++)。所以我的问题是,如何在C#中创建其中一个?

我一直在研究像Marshal.GetNativeVariantForObject这样的方法,但正确使用它的文档似乎有点薄,所以任何示例代码都会很有用。

1 个答案:

答案 0 :(得分:3)

使用BStrWrapper类:

comObject.setValue(new BStrWrapper(str));