C# - 从BSTR获取字符串*

时间:2014-09-22 09:29:10

标签: c#

在ac#应用程序中,我正在使用API​​来提取客户信息,并且我正在尝试获取用户的电子邮件地址字符串 - API文档声明我可以调用以下内容用于拉回音符字符串的对象(电子邮件地址只能从此函数获取/设置)

HRESULT NoteField( [in] BSTR bstrFieldName, [out, retval] BSTR *pNoteField);

然而,当我在c#中调用它时,我得到一个空字符串

string email = object.NoteField["Email"]

我怎样才能获得价值?

2 个答案:

答案 0 :(得分:5)

非托管BSTR*和托管string不是一回事。你需要在两者之间进行转换。

Marshal.PtrToStringBSTRMarshal.StringToBSTR应该做你需要的。有点像:

IntPtr inPtr = Marshal.StringToBSTR("Email");
IntPtr outPtr = object.NoteField[inPtr];
// or you may need to do this
// IntPtr outPtr;
// object.NoteField(inPtr, out outPtr);

string email = Marshal.PtrToStringBSTR(outPtr);
Marshal.FreeBSTR(inPtr);
Marshal.FreeBSTR(outPtr);

答案 1 :(得分:0)

这对我有用

string s1 = Marshal.PtrToStringAnsi((IntPtr)outPtr);