LPTSTR и LPWSTR и подобные определения на самом деле просто определяют. BSTR и LPOLESTR имеют особое значение - они указывают, что указанная строка выделена особым образом.
Строка, на которую указывает BSTR, должна быть выделена с помощью функций семейства SysAllocString (). Строка, на которую указывает LPOLESTR, обычно должна быть выделена с помощью CoTaskMemAlloc () (это следует искать в документации, чтобы COM-вызов принимал / возвращал ее).
Если требования выделения / освобождения для строк, на которые указывают BSTR и LPOLESTR, нарушаются, программа может столкнуться с неопределенным поведением.