在ac#应用程序中,我正在使用API来提取客户信息,并且我正在尝试获取用户的电子邮件地址字符串 - API文档声明我可以调用以下内容用于拉回音符字符串的对象(电子邮件地址只能从此函数获取/设置)
HRESULT NoteField( [in] BSTR bstrFieldName, [out, retval] BSTR *pNoteField);
然而,当我在c#中调用它时,我得到一个空字符串
string email = object.NoteField["Email"]
我怎样才能获得价值?
答案 0 :(得分:5)
非托管BSTR*
和托管string
不是一回事。你需要在两者之间进行转换。
Marshal.PtrToStringBSTR和Marshal.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);