2
BSTR DoSOmething()
{
   return L"";
}

或者可以将 TCHAR * 传递给以 BSTR 作为输入参数的 API。

是否可以通过return语句将wchar_t字符串转换为BSTR。会导致一些内存损坏吗?

4

1 回答 1

5

不,这是不行的,因为一些 API 不仅需要一个WCHAR*指针,它BSTR也是,而是一个BSTR带有长度信息的真实指针。仍然以这种方式投射可能通常效果很好,这可能会产生误导。

关于 BSTR 的一切:Eric 的 BSTR 语义完整指南

那里的相关引述:

2) 必须使用 SysAlloc* 系列函数分配和释放 BSTR。PWSZ 可以是堆栈中的自动存储缓冲区,也可以使用 malloc、new、LocalAlloc 或任何其他内存分配器分配。

3) BSTR 是固定长度的。PWSZ 可以是任意长度,仅受其缓冲区中有效内存量的限制。

4) BSTR 总是指向缓冲区中的第一个有效字符。PWSZ 可以是指向字符串缓冲区中间或结尾的指针。

于 2012-09-27T10:47:14.333 回答