Есть ли общедоступная DLL с strsafe-функциями?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 05.01.18 09:42
Оценка:
Набор strsafe-функций (StringCbXxx/StringCchXxx) был анонсирован в SDK для XP SP2 (2004-й год). Однако, даже в последних SDK/WDK они все подключаются из статической библиотеки, а не импортируются из DLL.

MS так и не удосужилась положить их в общедоступную DLL, как lstrXxx и w[v]sprintf, или я чего не понимаю?
Re: Есть ли общедоступная DLL с strsafe-функциями?
От: okman Беларусь https://searchinform.ru/
Дата: 06.01.18 09:20
Оценка: 1 (1)
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Однако, даже в последних SDK/WDK они все подключаются из статической библиотеки, а не импортируются из DLL.


А в чем смысл делать для них отдельную dll? Эти функции, если не ошибаюсь, реализованы в
заголовочных файлах и компилятор сможет неплохо соптимизировать код с их участием...
Re: Есть ли общедоступная DLL с strsafe-функциями?
От: Alexander G Украина  
Дата: 06.01.18 09:37
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>MS так и не удосужилась положить их в общедоступную DLL, как lstrXxx и w[v]sprintf, или я чего не понимаю?


Ну, для себя они положили функции вроде wcscat_s в ntdll
Русский военный корабль идёт ко дну!
Re[2]: Есть ли общедоступная DLL с strsafe-функциями?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 07.01.18 14:08
Оценка:
Здравствуйте, okman, Вы писали:

O>реализованы в заголовочных файлах и компилятор сможет неплохо соптимизировать код с их участием...


С таким подходом можно энную часть стандартных DLL в заголовки перетаскать. Сделали бы на выбор — те же memcpy/memset и прочие с незапамятных времен есть в intrinsic.

Меня, собственно, там всегда интересовали прежде всего printf-функции. В ядре-то всегда можно прилинковаться к экспортам из ntoskrnl, а в пользовательском процессе — только к wsprintf из user32 или wnsprintf из shlwapi. У первой нет ограничения по размеру буфера, и у обеих обрезаны возможности форматирования. Про первую до сих пор пугают в документации, что не гарантируется завершение строки нулем, хотя я со времен XP ни в одной реализации не встречал незавершенных строк.

А динамически линковаться с CRT — это либо класть нужную DLL в дистрибутив, либо регулярно сталкиваться с отсутствием нужной DLL в системе.
Re[3]: Есть ли общедоступная DLL с strsafe-функциями?
От: okman Беларусь https://searchinform.ru/
Дата: 07.01.18 15:30
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>С таким подходом можно энную часть стандартных DLL в заголовки перетаскать.


Кстати, неплохая идея ))

ЕМ>Меня, собственно, там всегда интересовали прежде всего printf-функции. В ядре-то всегда можно прилинковаться к экспортам из ntoskrnl, а в пользовательском процессе — только к wsprintf из user32 или wnsprintf из shlwapi. У первой нет ограничения по размеру буфера, и у обеих обрезаны возможности форматирования. Про первую до сих пор пугают в документации, что не гарантируется завершение строки нулем, хотя я со времен XP ни в одной реализации не встречал незавершенных строк.


ЕМ>А динамически линковаться с CRT — это либо класть нужную DLL в дистрибутив, либо регулярно сталкиваться с отсутствием нужной DLL в системе.


Так а в чем конкретно проблема с StringCchPrintf, например?
Я вызываю StringCchPrintf, компилятор/компоновщик упаковывает ее в exe, наружу не торчит никаких импортов к другим dll.
Заодно нету ненужных (иногда) ссылок на user32/shlwapi32, которые в некоторых случаях только мешают.
Все довольны, все смеются. Разве не так?..
Re[4]: Есть ли общедоступная DLL с strsafe-функциями?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 07.01.18 15:58
Оценка:
Здравствуйте, okman, Вы писали:

O>Я вызываю StringCchPrintf, компилятор/компоновщик упаковывает ее в exe, наружу не торчит никаких импортов к другим dll.


Типа, надо объявить идею разделяемого кода несостоятельной?

O>Заодно нету ненужных (иногда) ссылок на user32/shlwapi32, которые в некоторых случаях только мешают.


В каких случаях они могут мешать, кроме ссылок на относительно новые DLL, которых нет в старых системах? Если стоит задача сделать EXE, который будет работать и в Win95 — другой вопрос, но сейчас даже XP почти не встречается, не говоря уже о более ранних системах. Я еще несколько лет назад перестал поддерживать 2k, и еще никто не пожаловался.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.