BSTR
est différent de WCHAR[]
. Les valeurs BSTR
sont préfixées avec leur longueur, ainsi que les valeurs nulles. Si vous traitez des objets in-process écrits en C ou C++, vous vous en tirerez généralement, car le code C/C++ supposera probablement que votre BSTR est un caractère large terminé par zéro. chaîne. Si, d'un autre côté, vous avez affaire à des objets hors processus/inter-machines, le code proxy/stub marshalling supposera que vous avez réellement passé un BSTR, et attendra de trouver une longueur champ (il a besoin de cela pour savoir combien de données pour marshal). Cela ira horriblement mal. En résumé: si quelque chose attend un BSTR, appelez SysAllocString (ou CComBSTR, ou CString :: AllocSysString).