API-интерфейс StrSafe немного странный, поскольку у него нет ни собственного .DLL, ни собственных экспортируемых функций. Я предполагаю, что это было разработано таким образом, потому что это должно было поддержать более старые версии Windows, которые уже были выпущены. Он был создан во время принудительного пакета безопасности WinXP:
В феврале и марте 2002 года все разработки приложений в Microsoft были остановлены, и разработчики приняли участие в инициативе Security Push. Цель состояла в том, чтобы проверить весь код на наличие возможных уязвимостей и устранить эти проблемы. Одним из результатов Security Push стала библиотека безопасных строковых функций под названием «strsafe.lib» со связанным заголовком «strsafe.h». Эта библиотека доступна через Platform SDK, который можно загрузить с веб-сайта MSDN и автоматически устанавливается как часть Visual C ++. NET 2003.
blockquote>Насколько я могу судить, копия strsafe.h была также включена в Написание безопасного кода (второе издание) Майкла Ховарда и Дэвида Леблана, но я не уверен, что они являются первоначальными авторами (Дэвид Леблан является автором SafeInt):
Вы можете найти копию Strsafe.h в сопутствующем контенте в папке Secureco2 \ Strsafe.
blockquote>msvcrt.dll в настоящее время является системным файлом, без него поставляется только Windows 95. Вы не должны использовать его в качестве среды выполнения C, но код SDK от Microsoft, вероятно, может использовать его без проблем.
msvcrt.dll теперь является «известной DLL», что означает, что это системный компонент , принадлежащий и созданный Windows. Он предназначен для будущего использования только компонентами системного уровня.
blockquote>Если вы хотите использовать msvcrt.dll в качестве среды выполнения C, вы должны использовать WDK для < = Windows 7, но при использовании встроенной версии StrSafe. h, пока вы ссылаетесь на .lib, который содержит требуемые функции типа
vsnprintf
, на самом деле не должно иметь значения, из какого CRT оно происходит. Существует также файл StrSafe.lib, но Microsoft рекомендует использовать встроенную версию.Вы правы в том, что Windows API должен быть независимым от CRT, но StrSafe также поддерживает функции stdin, такие как
StringCbGetsA
, и они по какой-то причине не решили разделить их в отдельный заголовок. Это в сочетании с необходимостью существующей функции типаvsnprintf
для выполнения фактической работы означает, что StrSafe в некоторой степени привязан к CRT, даже если он предназначен для использования всеми разработчиками WinAPI.Вероятно, нет верного ответа на вопрос, является ли он частью WinAPI или нет, поскольку он немного субъективен. Поскольку он включен в SDK в папке include, можно предположить, что Microsoft считает, что это компонент SDK / API, а не компонент CRT.
При создании кнопки используйте амперсанд перед буквой, которую вы хотите Alt +? в свойстве Caption.
Примеры:
& File ---> F ile
& Edit ---> E dit
F & orge -> F o rge
E & nough -> E n aough
Используя CodeSnippetExpression и строку, заключенную в кавычки, я смог выдать источник, который я бы хотел увидеть из Microsoft.CSharp.CSharpCodeGenerator.
Итак, чтобы ответить на вопрос выше, замените эту строку:
field.InitExpression = new CodePrimitiveExpression(HugeString);
следующей: