Строки в STRINGTABLE обычно не заканчиваются нулевым терминатором, вместо этого формат STRINGTABLE указывает, что каждой строке предшествует длина строки.Обычно LoadString()
копирует строковый ресурс в предоставленный приложением буфер и добавляет нулевой терминатор.В этом случае вам на самом деле не нужна опция /n
.
Однако LoadString()
(или точнее LoadStringW()
, как вариант ANSI не может этого сделать) можно использовать для извлечения ресурса необработанной строки при указании0
в качестве размера буфера:
WCHAR* str;
int str_len;
str_len = LoadStringW(hInstance, ID_STRING, (LPWSTR) &str, 0);
В этом случае он просто сохраняет адрес исходного строкового ресурса в str
, как отображается в памяти процесса, и копирование строки не происходит.Очевидно, что реализация LoadLibrary()
тогда просто не может добавить терминатор, и это когда опция компилятора ресурса удобна, так как работать со строками с нулевым символом в конце намного проще, чем использовать длину строки (возвращаемое значение LoadLibrary()
).*