¿Cuál es el significado de BSTR, LPCOLESTR, LPCWSTR, LPTSTR, LPCWCHAR, y muchos otros si solo son un montón de define esa resolución para wchar_t de todos modos?¿Cuál es el significado de BSTR, LPCOLESTR y otros?
Respuesta
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.
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.
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 ywchar_t
basado en la definición deOLE2ANSI
LPCWSTR
es una cadena dewchar_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.
Esta parece ser la respuesta más precisa con respecto a 'LPCOLESTR'. – karmasponge
- 1. ¿Cuál es el significado de []
- 2. ¿Cuál es el significado de ∃?
- 3. ¿Cuál es el significado del concepto de "unidad de trabajo" en NHibernate y otros ORM?
- 4. ¿Cuál es el significado de android.location.LocationManager.PASSIVE_PROVIDER?
- 5. ¿Cuál es el significado de ORM?
- 6. ¿Cuál es el significado SQL de 0x5E5B7D7E?
- 7. ¿Cuál es la diferencia entre BSTR y _bstr_t?
- 8. ¿Cuál es el significado de Transaction?
- 9. ¿Cuál es el significado de id?
- 10. ¿Cuál es el significado de '==' en C?
- 11. ¿Cuál es el significado de $$ en Ruby?
- 12. ¿Cuál es el significado de 'sourceSets.all *'
- 13. ¿Cuál es el significado de ".. ::." Cª#?
- 14. ¿Cuál es el significado de svg: svg?
- 15. ¿Cuál es el significado de <#= #>
- 16. ¿Cuál es el significado de char (y de prueba (...)) [2]
- 17. ¿Cuál es el significado de "unidad Hero"?
- 18. ¿Cuál es el significado de este typedef?
- 19. ¿Cuál es el significado de view.bounds.origin?
- 20. ¿Cuál es el significado de CTOR?
- 21. ¿Cuál es el significado de @_ en Perl?
- 22. ¿Cuál es el significado de erb?
- 23. ¿Cuál es el significado de "sintético estático"?
- 24. ¿Cuál es el significado de esta sintaxis?
- 25. ¿Cuál es el significado de '_' en python?
- 26. ¿Cuál es el significado del operador &?
- 27. ¿Cuál es el significado de * nix? ¿Y cuál es su relación con Ruby?
- 28. ¿Cuál es el significado de 'char (* p) [5];'?
- 29. ¿Cuál es el significado de "mutable" en el objetivo C?
- 30. ¿Cuál es el significado de "cascada' en el CSS?
¿Solo esos dos son especiales? – CannibalSmith
Como puedo recordar, sí. – sharptooth