BSTR DoSOmething()
{
return L"";
}
OR是否可以将TCHAR *传递给采用BSTR作为输入参数的API。
是否可以通过return语句将wchar_t字符串转换为BSTR。是否会导致内存损坏?
答案 0 :(得分:5)
不,这不合适,因为有些API不仅需要WCHAR*
指针,BSTR
也是{1}}指针,而是附加长度信息的真实BSTR
指针。仍然以这种方式投射可能会很好,这可能会产生误导。
关于BSTR的一切:Eric's Complete Guide To BSTR Semantics。
来自那里的相关引言:
2)必须使用SysAlloc *系列分配和释放BSTR 功能。 PWSZ可以是堆栈中的自动存储缓冲区 或者使用malloc,new,LocalAlloc或任何其他内存分配 分配器。
3)BSTR具有固定长度。 PWSZ可以是任何长度的,有限的 只能通过其缓冲区中的有效内存量。
4)BSTR始终指向缓冲区中的第一个有效字符。一个 PWSZ可以是指向字符串缓冲区中间或末尾的指针。