0

我有一个 C# 类库,它是 COM 可见的,可以从 Visual Studio 6 应用程序中调用。其中一种方法需要返回一个字符串。我试过这两种方法:

public void GetString(out string sText)
{
    sText = MemberStringVariable;
}

当我从 VC6 调用上述内容时,我会抛出异常。

public string GetString()
{
    return MemberStringVariable;
}

当我调用上述方法(以 BSTR* 作为参数)时,我得到一个 NULL 指针。

这样做的正确方法是什么?

4

3 回答 3

0

你的第二种方法:

public string GetString() { return MemberStringVariable; }

应该管用。我一直都这样做。您在 C++ 中获得的类型是 comutil.h 中定义的 _bstr_t

于 2012-07-13T16:05:55.847 回答
0

请参阅问题和答案。我怀疑您是否可以将 a 返回string到本机代码。

于 2012-07-13T16:13:38.707 回答
0

哦,自从我进行 COM 互操作以来已经有一段时间了,但我似乎记得您可能需要MarshalAsAttribute在方法的返回值上使用。

[return: MarshalAs(UnmanagedType.Bstr)]
public string GetString() 
{ 
    return MemberStringVariable; 
} 

有关更多示例,请参阅http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshalasattribute(v=vs.100).aspx

于 2012-07-13T16:14:49.417 回答