BSTR DoSOmething()
{
return L"";
}
或者可以将 TCHAR * 传递给以 BSTR 作为输入参数的 API。
是否可以通过return语句将wchar_t字符串转换为BSTR。会导致一些内存损坏吗?
BSTR DoSOmething()
{
return L"";
}
或者可以将 TCHAR * 传递给以 BSTR 作为输入参数的 API。
是否可以通过return语句将wchar_t字符串转换为BSTR。会导致一些内存损坏吗?
不,这是不行的,因为一些 API 不仅需要一个WCHAR*
指针,它BSTR
也是,而是一个BSTR
带有长度信息的真实指针。仍然以这种方式投射可能通常效果很好,这可能会产生误导。
关于 BSTR 的一切:Eric 的 BSTR 语义完整指南。
那里的相关引述:
2) 必须使用 SysAlloc* 系列函数分配和释放 BSTR。PWSZ 可以是堆栈中的自动存储缓冲区,也可以使用 malloc、new、LocalAlloc 或任何其他内存分配器分配。
3) BSTR 是固定长度的。PWSZ 可以是任意长度,仅受其缓冲区中有效内存量的限制。
4) BSTR 总是指向缓冲区中的第一个有效字符。PWSZ 可以是指向字符串缓冲区中间或结尾的指针。