从C#COM组件方法返回一个字符串

时间:2012-07-13 15:58:26

标签: c# com

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

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

当我从VC6调用上面的内容时,我会抛出一个异常。

public string GetString()
{
    return MemberStringVariable;
}

当我调用上面的内容(以BSTR *作为参数)时,我得到一个NULL指针。

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

3 个答案:

答案 0 :(得分:0)

你的第二种方法:

public string GetString() { return MemberStringVariable; }

应该有效。我一直这样做。 您在C ++中获得的类型是_bstr_t,如comutil.h中所定义

答案 1 :(得分:0)

请参阅this问题和答案。我很怀疑你可以将string返回到本机代码。

答案 2 :(得分: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