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

发布于 2024-08-06 15:07:27 字数 585 浏览 5 评论 0原文

我正在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

零時差 2024-08-13 15:07:27

使用 BStrWrapper

comObject.setValue(new BStrWrapper(str));

Use the BStrWrapper class:

comObject.setValue(new BStrWrapper(str));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文