SysAllocStringLen

Все, что вы хотели знать о программизме, но боялись спросить.
Ответить
Аватара пользователя
dima
Житель
Сообщения: 690
Зарегистрирован: 19 фев 2003, 19:26
Откуда: Хабаровск->Toronto

SysAllocStringLen

Сообщение dima »

Сижу, думаю, читаю MSDN - нифига понять не могу.
Вот имплементация Microsofta

inline BSTR A2WBSTR(LPCSTR lp, int nLen = -1)
{
USES_CONVERSION;
BSTR str = NULL;
int nConvertedLen = MultiByteToWideChar(_acp, 0, lp, nLen, NULL, NULL)-1;
str = ::SysAllocStringLen(NULL, nConvertedLen);
if (str != NULL)
{
MultiByteToWideChar(_acp, 0, lp, -1, str, nConvertedLen);
}
return str;
}

Беспокоит след вопрос. Можно-ли алокировать память через NEW вместо ::SysAllocStringLen в данном сценарии ?
Аватара пользователя
ajkj3em
Маньяк
Сообщения: 2063
Зарегистрирован: 12 ноя 2006, 06:53

Re: SysAllocStringLen

Сообщение ajkj3em »

можно, но тогда bstr нельзя будет передавать назад в win32 api, который моментально начнет валится на чем-нибудь типа win98-se2-gold-chinese edition, release 2 ... если в win32 api существует "ненужная" функция - будь спокоен, она затыкает какой-то страшный баг в другой части api.
ura
Житель
Сообщения: 915
Зарегистрирован: 09 мар 2003, 22:46

Сообщение ura »

Нет нельзя, поскольку SysAllocString выделяет память для типа BSTR и хотя он с виду обычный WCHAR но на самом деле еще и содержит длину строки где то в конце и является специальным типом для работы со строками совместимым с VB строками. Для передачи строк через методы IDispatch dual интерфейсов годятся только BSTR.
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

ura писал(а):Нет нельзя, поскольку SysAllocString выделяет память для типа BSTR и хотя он с виду обычный WCHAR но на самом деле еще и содержит длину строки где то в конце и является специальным типом для работы со строками совместимым с VB строками. Для передачи строк через методы IDispatch dual интерфейсов годятся только BSTR.
Да, только, если не ошибаюсь, длина строки, указывается в начале, как у паскалистов.
ura
Житель
Сообщения: 915
Зарегистрирован: 09 мар 2003, 22:46

Сообщение ura »

точно, вот она старость не радость... :oops:
Ответить