2009-10-22 19 views

Respuesta

6

LPTSTR y LPWSTR y definiciones similares son realmente solo define. BSTR y LPOLESTR tienen significados especiales: indican que la cadena apuntada está asignada de una manera especial.

La cadena apuntada por BSTR debe asignarse con las funciones de familia SysAllocString(). La cadena apuntada por LPOLESTR generalmente se asigna con CoTaskMemAlloc() (esto se debe buscar en la documentación de la llamada COM que la acepta/devuelve).

Si se infringen los requisitos de asignación/desasignación para las cadenas señaladas por BSTR y LPOLESTR, el programa puede ejecutar un comportamiento indefinido.

+0

¿Solo esos dos son especiales? – CannibalSmith

+0

Como puedo recordar, sí. – sharptooth

2

La página de MSDN en Windows Data Types podría proporcionar aclaraciones sobre las diferencias entre algunos de estos tipos de datos.

LPCWSTR - Puntero a una cadena terminada en nulo constante de 16 bits caracteres Unicode.

LPTSTR - Un LPWSTR si UNICODE se define, un LPSTR lo contrario.

7
  • LPTSTR indica el búfer de cadena puede ser ANSI o Unicode dependiendo de la definición de la macro: UNICODE.
  • LPCOLESTR fue inventado por el equipo OLE porque cambia su comportamiento entre el carbón y wchar_t basado en la definición de OLE2ANSI
  • LPCWSTR es una cadena de wchar_t
  • BSTR eso es un LPOLESTR sido asignados con SysAllocString.
  • LPCWCHAR es un puntero a un solo carácter de anchura constante.

En realidad, son bastante diferentes. O al menos, fueron en algún momento diferentes. Ole fue desarrollado, y necesitó, cadenas de caracteres amplias, mientras que la API de Windows todavía era Win16 y no admitía cadenas amplias de forma nativa.

Además, las versiones anteriores del SDK de Windows no usaban wchar_t para WCHAR pero sin signo corto. El SDK de Windows en GCC se vuelve interesante ya que creemos que GCC 32bit tiene un wchar_t de 32 bits, en los compiladores con wchar_t de 32 bits, WCHAR se definiría como un corto sin firmar o algún otro tipo, eso es 16bits en ese compilador.

+0

Esta parece ser la respuesta más precisa con respecto a 'LPCOLESTR'. – karmasponge

Cuestiones relacionadas