Относительно 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); 
Другие вопросы по тегам