9
votes

Quelle est la signification de bstr, LPColestr et d'autres?

Quelle est la signification de BSTR, LPColestr, LPCWSTR, LPSTR, LPCWCHAR, et bien d'autres s'ils sont tous simplement un tas de définitions qui résolvent à WCHAR_T de toute façon?


0 commentaires

3 Réponses :


11
votes

LPTRSTR et LPWSTR et des définitions similaires sont vraiment définies. BSTR et LPOLestr ont des significations particulières - elles indiquent que la chaîne pointée est allouée de manière particulière.

Chaîne pointée par BStr doit être attribuée à Sysallocstring () Fonctions familiales. La chaîne indiquée par LPOlestr est généralement allouée avec CoTaskMAllAlC () (cela devrait être considéré dans la documentation à l'appel COM acceptant / le renvoyer).

Si les exigences d'allocation / de distribution pour les chaînes pointées par BSTR et LPOLestr sont violées, le programme peut fonctionner dans un comportement non défini.


0 commentaires


13
votes
  • LPTRSTR indique que le tampon de chaîne peut être ANSI ou UNICODE Selon la définition de la macro: Unicode .
  • lpcolestr a été inventé par l'équipe OLE, car il utilise son comportement entre char et wchar_t en fonction de la définition de ole2ansi
  • lpcwstr est un wchar_t string
  • bstr est un lpoletr qui a été alloué à Sysallocstring.
  • lpcwchar est un pointeur sur un seul caractère large constant.

    Ils sont en fait tous plutôt différents. Ou du moins, étaient différents différents. OLE a été développée - et besoin de chaînes larges tandis que l'API Windows était toujours Win16 et n'a pas pris en charge de larges chaînes de manière nativement.

    Également, les premières versions de la Windows SDK n'ont pas utilisée WCHAR_T pour WCHAR mais non signé. Le SDK Windows sur GCC devient intéressant AS - IM a conduit à croire que GCC 32bit a une 32 bits WRCHAR_T - sur des compilateurs 32 bits WRCHAR_T, WRCHAR serait défini comme un type abrégé non signé ou un autre type de 16bits sur ce compilateur.


1 commentaires

Cela semble être la réponse plus précise concernant «LPColestr».