Относительно SafeArrayPutElement - PullRequest
       27

Относительно SafeArrayPutElement

0 голосов
/ 10 января 2012

К вашему сведению, я начинающий в COM \ ATL и Unicode

Я использую SafeArrayPutElement(safearray*,LONG,void*) в своем коде, и проблема в ...

здесь, функция работает нормально, когда я даю третий параметр как L"ItWorks" * 1007 то есть *

SafeArrayPutElement(safearray*,LONG, L"ItWorks");

но если я использую

wchar_t str;
str = 'a';
SafeArrayPutElement(safearray*,LONG,&str);

эта функция не может сказать E_OUTOFMEMORY

здесь мне нужно, у меня есть строка в переменной char*, как мне нужно использовать ее в качестве параметра THIRD для вышеуказанной функции. Может ли кто-нибудь, пожалуйста, помогите мне в этом.

ТИА

Нэвин

1 Ответ

2 голосов
/ 10 января 2012

Единственный тип строки, который безопасно использовать в 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); 
...