Относительно SafeArrayPutElement
К вашему сведению, я начинающий в COM\ATL и Unicode
я использую SafeArrayPutElement(safearray*,LONG,void*)
в моем коде и проблема...
здесь функция работает нормально, когда я даю третий параметр как L"ItWorks"
т.е.
SafeArrayPutElement(safearray*,LONG, L"ItWorks");
но если я использую
wchar_t str;
str = 'a';
SafeArrayPutElement(safearray*,LONG,&str);
эта функция не говорит E_OUTOFMEMORY
здесь моя потребность, у меня есть строка в char*
переменная, как мне нужно использовать это в качестве параметра THIRD для вышеуказанной функции. Может кто-нибудь, пожалуйста, помогите мне в этом отношении.
ТИА
Нэвин
1 ответ
Единственный тип строки, который безопасно использовать в COM в BSTR
не сырье wchar_t*
, Это потому что BSTR
содержит дополнительные внутренние данные, которые COM использует для целей сортировки. использование SysAllocString()
или же SysAllocStringLen()
выделить новый BSTR
из wchar_t*
, а затем использовать SysFreeString()
освободить его, когда вы закончите использовать его, например:
BSTR bstr = SysAllocString(L"ItWorks");
SafeArrayPutElement(..., bstr);
SysFreeString(bstr);
,
wchar_t str = L'a';
BSTR bstr = SysAllocStringLen(&str, 1);
SafeArrayPutElement(..., bstr);
SysFreeString(bstr);