Каково значение BSTR, LPCOLESTR и других?

Я нахожусь в процессе перезаписи программы OpenKore Perl в Python под именем Erok (реверс оригинала Кора ). До сих пор Python оказывается полным лучшим языком, особенно из-за его мощных строковых функций парсинга, которые не требуют использования регулярных выражений, которое действительно ускоряет большой его парсинг файла.

7
задан CannibalSmith 22 October 2009 в 13:37
поделиться

3 ответа

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.

10
ответ дан 6 December 2019 в 07:51
поделиться
  • 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, но беззнаковые короткие.

11
ответ дан 6 December 2019 в 07:51
поделиться

На странице MSDN Типы данных Windows могут быть разъяснены различия между некоторыми из этих типов данных.

LPCWSTR - Указатель на постоянную 16-битную строку с завершающим нулем. Символы Юникода.

LPTSTR - LPWSTR , если определен UNICODE, в противном случае - LPSTR .

2
ответ дан 6 December 2019 в 07:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: