ну напишут же...
От: NetRaider Россия  
Дата: 16.02.03 05:59
Оценка: 12 (4)
файлик msdasc.h, строка 241:

/* [in] */ LPCOLESTR pwszszzProviderFilter,



21.02.03 21:59: Перенесено модератором из 'Коллеги, улыбнитесь' в Философию программирования — ХД
Re: ну напишут же...
От: Кодт Россия  
Дата: 17.02.03 15:52
Оценка:
Здравствуйте, NetRaider, Вы писали:

NR>файлик msdasc.h, строка 241:

NR>   /* [in] */ LPCOLESTR pwszszzProviderFilter,  :))

Зато исчерпывающе ясно: две строки с нулями на конце и финальным нулем. Достаточно распространенная форма для мультистринга (частный случай из 2 строк).

Единственно, что непонятно: как такую хрень маршалировать?
Перекуём баги на фичи!
Re[2]: ну напишут же...
От: IvEv  
Дата: 18.02.03 15:37
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, NetRaider, Вы писали:


К>Зато исчерпывающе ясно: две строки с нулями на конце и финальным нулем. Достаточно распространенная форма для мультистринга (частный случай из 2 строк).

К>Единственно, что непонятно: как такую хрень маршалировать?

А если больше строк с "нулями на конце". Как такую хрень читать?
Один из самых обычных и ведущих к самым большим бедствиям соблазнов есть соблазн словами: "Все так делают".
Лев Толстой
Re[3]: ну напишут же...
От: Кодт Россия  
Дата: 18.02.03 16:13
Оценка: 3 (1)
Здравствуйте, IvEv, Вы писали:

К>>Зато исчерпывающе ясно: две строки с нулями на конце и финальным нулем. Достаточно распространенная форма для мультистринга (частный случай из 2 строк).

К>>Единственно, что непонятно: как такую хрень маршалировать?

IE>А если больше строк с "нулями на конце". Как такую хрень читать?


В данном случае — количество строк жестко прибито требованиями того API, где это написано.

Я могу привести пример, где это так: фильтры файлов в диалоге Open/Save. Там это выглядит как
"файлы ворда (*.doc и проч.)\0*.doc,*.rtf,*.txt\0"

Как такую хрень читать:
const char* read_multistring(const char* str, const char** next)
{
  int len = strlen(str);
  if(len > 0) ++len;
  if(next) *next = str + len;
  return str;
}
bool is_multistring_end(const char* str)
{
  return *str == 0; // конец - это строка нулевой длины
}

int multistring_length(const char* str)
{
  int len = 0;
  while(true)
    if     (str[len+1]) len += 2;
    else if(str[len]  ) len += 1;
    else                return len;
}


Как такую хрень писать:
const char* add_str_to_multistring(char* dst, const char* src)
// возвращает указатель на конец мультистринга
{
  strcpy(dst, src);
  dst += strlen(dst) + 1; // за конец строки
  *dst = 0; // закрываем мультистринг
  return dst;
}


CString (и, вроде бы, std::string) поддерживают мультистринги.
Перекуём баги на фичи!
Re[4]: ну напишут же...
От: IvEv  
Дата: 19.02.03 05:56
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, IvEv, Вы писали:


IE>>А если больше строк с "нулями на конце". Как такую хрень читать?


К>В данном случае — количество строк жестко прибито требованиями того API, где это написано.


К>Я могу привести пример, где это так: фильтры файлов в диалоге Open/Save. Там это выглядит как

К>"файлы ворда (*.doc и проч.)\0*.doc,*.rtf,*.txt\0"

К>Как такую хрень читать:

К>[c]
К> ...

К>...


К>Как такую хрень писать:

К>...

К>CString (и, вроде бы, std::string) поддерживают мультистринги.


Под словом "читать" я имел ввиду произносить название такой переменной.
А за примеры спасибо, может быть когда-нибудь пригодятся...
Один из самых обычных и ведущих к самым большим бедствиям соблазнов есть соблазн словами: "Все так делают".
Лев Толстой
Re: ну напишут же...
От: DSD Россия http://911.ru/cv
Дата: 19.02.03 23:30
Оценка:
Здравствуйте, NetRaider, Вы писали:

NR>файлик msdasc.h, строка 241:


NR> /* [in] */ LPCOLESTR pwszszzProviderFilter,


Каждый сам вправе выбирать, какую нотацию ему использовать.
вот MicroSoft выбрали именно такую.... чтоб всех переплюнуть, видимо
--
DSD
Re: ну напишут же...
От: Awaken Украина  
Дата: 26.02.03 11:33
Оценка:
NR> /* [in] */ LPCOLESTR pwszszzProviderFilter,

венгерскую нотацию надо душить на корню
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.