如何将 .NET 字符串编组为 COM 调用的变体
我正在使用 C# 的第三方 COM 库。
有一些获取/设置方法采用 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 这样的方法,但是有关正确使用该方法的文档似乎有点薄弱,因此任何示例代码都会有用。
I'm using a third-party COM library from C#.
There are get/set methods that take a parameter of type VARIANT (type VT_BSTR).
In the .NET wrapper, these parameters appear as type object
, i.e.
object getValue();
void setValue( object val );
The getValue method works ok, I perform a simple cast of the object to type string:
string str = (string)comObject.getValue();
but setting the string in a similar way doesn't:
string str = "test";
comObject.setValue( str );
The third party library doesn't like this and generates an exception. It must be expecting a VARIANT of type VT_BSTR (as this works from native C++). So my question is, how do I create one of these in C#?
I've been looking at methods like Marshal.GetNativeVariantForObject
, but documentation on correct usage of this seems a bit thin on the ground, so any example code would be useful.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用
BStrWrapper
Use the
BStrWrapper
class: