Я нахожусь в процессе перезаписи программы OpenKore Perl в Python под именем Erok (реверс оригинала Кора ). До сих пор Python оказывается полным лучшим языком, особенно из-за его мощных строковых функций парсинга, которые не требуют использования регулярных выражений, которое действительно ускоряет большой его парсинг файла.
LPTSTR and LPWSTR and similar defines are really just defines. BSTR and LPOLESTR have special meanings - they indicate the the string pointed to is allocated in a special way.
String pointed to by BSTR must be allocated with SysAllocString() family functions. String pointed to by LPOLESTR is usually to be allocated with CoTaskMemAlloc() (this should be looked up in the documentation to the COM call accepting/returning it).
If allocation/deallocation requirements for strings pointed to by BSTR and LPOLESTR are violated the program can run into undefined behaviour.
LPTSTR
указывает, что строковый буфер может быть ANSI или UNICODE в зависимости от определения макроса: UNICODE
. LPCOLESTR
был изобретен Команда OLE, потому что она переключает свое поведение между char и wchar_t
на основе определения OLE2ANSI
LPCWSTR
- это wchar_t
строка BSTR
- это LPOLESTR, который был выделен с помощью SysAllocString. LPCWCHAR
- это указатель на один постоянный широкий символ. На самом деле все они довольно разные. Или, по крайней мере, когда-то были другими. Ole был разработан - и нуждался в - широких строках, в то время как Windows API все еще был Win16 и вообще не поддерживал широкие строки.
Кроме того, ранние версии Windows SDK не использовали wchar_t для WCHAR, но беззнаковые короткие.
На странице MSDN Типы данных Windows могут быть разъяснены различия между некоторыми из этих типов данных.
LPCWSTR - Указатель на постоянную 16-битную строку с завершающим нулем. Символы Юникода.
LPTSTR - LPWSTR , если определен UNICODE, в противном случае - LPSTR .