通过ref将字符串传递给C#中的activex组件

本文关键字:中的 activex 组件 ref 字符串 通过 | 更新日期: 2023-09-27 18:01:55

我正在尝试使用C#中的模式function(ref string returnvalue)为我们提供一个ActiveX API函数。API函数修改字符串。

string returnValue = String.Empty;
api.func(ref returnValue); // DISP_E_TYPEMISMATCH

好吧,也许这是因为字符串是不可变的。根据以下内容尝试StringBuilder

StringBuilder returnValue = new StringBuilder(128);
api.func(returnValue);

这会导致关于类型不匹配的编译时错误。

如何调用此函数?

我不知道是否需要将C#字符串封送到BStr,如果需要,我不知道如何通过ref将其传递给API函数。

通过ref将字符串传递给C#中的activex组件

如果func应该更改returnValue,我认为您的代码应该这样更改:

string returnValue = String.Empty;
api.func(ref returnValue);

您应该在通过引用传递returnValue之前初始化它。

UPD:你试过这样称呼它吗?:

api.func(ref Marshal.StringToBSTR(string value));

使用对string变量的引用来调用它,正如它所说:

string returnValue = "";
api.func(ref returnValue);

您可能想看看C#中的ref和out关键字。