我有一个C#类库,它是COM可见并从Visual Studio 6应用程序调用。其中一个方法需要返回一个字符串。我试过这两种方式:
public void GetString(out string sText)
{
sText = MemberStringVariable;
}
当我从VC6调用上面的内容时,我会抛出一个异常。
public string GetString()
{
return MemberStringVariable;
}
当我调用上面的内容(以BSTR *作为参数)时,我得到一个NULL指针。
这样做的正确方法是什么?
答案 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;
}