BSTR,LPCOLESTR,LPCWSTR,LPTSTR,LPCWCHAR以及许多其他的含义是什么,如果它们只是一堆解析为wchar_t的定义?
Chr*_*cke 11
LPTSTR表示字符串缓冲区可以是ANSI或UNICODE,具体取决于宏的定义:UNICODE.LPCOLESTR由OLE团队发明,因为它在char之间切换行为并wchar_t基于定义OLE2ANSILPCWSTR是一个wchar_t字符串BSTR 是一个已使用SysAllocString分配的LPOLESTR.LPCWCHAR 是指向单个常量宽字符的指针.他们实际上完全不同.或者至少,在某些时候是不同的.Ole开发 - 并且需要 - 宽字符串,而Windows API仍然是Win16并且本身根本不支持宽字符串.
此外,早期版本的Windows SDK并没有使用wchar_t作为WCHAR,而是使用unsigned short.GCC上的Windows SDK变得有趣 - 因为我认为GCC 32位具有32位wchar_t - 在具有32位wchar_t的编译器上,WCHAR将被定义为无符号短路或该编译器上16位的其他类型.
sha*_*oth 10
LPTSTR和LPWSTR以及类似的定义实际上只是定义.BSTR和LPOLESTR具有特殊含义 - 它们表示指向的字符串是以特殊方式分配的.
BSTR指向的字符串必须与SysAllocString()系列函数一起分配.LPOLESTR指向的字符串通常用CoTaskMemAlloc()分配(这应该在文档中查找接受/返回它的COM调用).
如果违反了BSTR和LPOLESTR指向的字符串的分配/解除分配要求,则程序可能会遇到未定义的行为.