Набор strsafe-функций (StringCbXxx/StringCchXxx) был анонсирован в SDK для XP SP2 (2004-й год). Однако, даже в последних SDK/WDK они все подключаются из статической библиотеки, а не импортируются из DLL.
MS так и не удосужилась положить их в общедоступную DLL, как lstrXxx и w[v]sprintf, или я чего не понимаю?
Re: Есть ли общедоступная DLL с strsafe-функциями?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Однако, даже в последних SDK/WDK они все подключаются из статической библиотеки, а не импортируются из DLL.
А в чем смысл делать для них отдельную dll? Эти функции, если не ошибаюсь, реализованы в
заголовочных файлах и компилятор сможет неплохо соптимизировать код с их участием...
Re: Есть ли общедоступная DLL с strsafe-функциями?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>MS так и не удосужилась положить их в общедоступную DLL, как lstrXxx и w[v]sprintf, или я чего не понимаю?
Ну, для себя они положили функции вроде wcscat_s в ntdll
Русский военный корабль идёт ко дну!
Re[2]: Есть ли общедоступная DLL с strsafe-функциями?
Здравствуйте, okman, Вы писали:
O>реализованы в заголовочных файлах и компилятор сможет неплохо соптимизировать код с их участием...
С таким подходом можно энную часть стандартных DLL в заголовки перетаскать. Сделали бы на выбор — те же memcpy/memset и прочие с незапамятных времен есть в intrinsic.
Меня, собственно, там всегда интересовали прежде всего printf-функции. В ядре-то всегда можно прилинковаться к экспортам из ntoskrnl, а в пользовательском процессе — только к wsprintf из user32 или wnsprintf из shlwapi. У первой нет ограничения по размеру буфера, и у обеих обрезаны возможности форматирования. Про первую до сих пор пугают в документации, что не гарантируется завершение строки нулем, хотя я со времен XP ни в одной реализации не встречал незавершенных строк.
А динамически линковаться с CRT — это либо класть нужную DLL в дистрибутив, либо регулярно сталкиваться с отсутствием нужной DLL в системе.
Re[3]: Есть ли общедоступная DLL с strsafe-функциями?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>С таким подходом можно энную часть стандартных DLL в заголовки перетаскать.
Кстати, неплохая идея ))
ЕМ>Меня, собственно, там всегда интересовали прежде всего printf-функции. В ядре-то всегда можно прилинковаться к экспортам из ntoskrnl, а в пользовательском процессе — только к wsprintf из user32 или wnsprintf из shlwapi. У первой нет ограничения по размеру буфера, и у обеих обрезаны возможности форматирования. Про первую до сих пор пугают в документации, что не гарантируется завершение строки нулем, хотя я со времен XP ни в одной реализации не встречал незавершенных строк.
ЕМ>А динамически линковаться с CRT — это либо класть нужную DLL в дистрибутив, либо регулярно сталкиваться с отсутствием нужной DLL в системе.
Так а в чем конкретно проблема с StringCchPrintf, например?
Я вызываю StringCchPrintf, компилятор/компоновщик упаковывает ее в exe, наружу не торчит никаких импортов к другим dll.
Заодно нету ненужных (иногда) ссылок на user32/shlwapi32, которые в некоторых случаях только мешают.
Все довольны, все смеются. Разве не так?..
Re[4]: Есть ли общедоступная DLL с strsafe-функциями?
Здравствуйте, okman, Вы писали:
O>Я вызываю StringCchPrintf, компилятор/компоновщик упаковывает ее в exe, наружу не торчит никаких импортов к другим dll.
Типа, надо объявить идею разделяемого кода несостоятельной?
O>Заодно нету ненужных (иногда) ссылок на user32/shlwapi32, которые в некоторых случаях только мешают.
В каких случаях они могут мешать, кроме ссылок на относительно новые DLL, которых нет в старых системах? Если стоит задача сделать EXE, который будет работать и в Win95 — другой вопрос, но сейчас даже XP почти не встречается, не говоря уже о более ранних системах. Я еще несколько лет назад перестал поддерживать 2k, и еще никто не пожаловался.