2012-01-10 4 views
0

FYI Я новичок в COM \ АТЛ и ЮникодаЧто касается SafeArrayPutElement

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

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

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

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

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

эта функция не говоря E_OUTOFMEMORY

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

ТИА

Нэвин

+0

Опубликовать реальный код, прохождение safearray * и LONG к функции никогда не скомпилируются. Строки в SAFEARRAY должны быть BSTR, а не wchar_t. –

ответ

2

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

Спасибо за ответ, Вот что представляет собой альтернатива для 'L' в L'a ', coz у меня уже есть строка в varayable, поэтому как ее преобразовать – Naveen

+0

Какую переменную вы используете? Я показал вам, как конвертировать 'wchar_t' и' wchar_t * '. Вы используете что-то еще? –

 Смежные вопросы

  • Нет связанных вопросов^_^