Какова максимальная длина строки атома в широких символах, 255 или 127?

Справочник по таблицам Atom говорит, что это 255 байтов, так что это дает мне 127 символов, но в моем предыдущий вопрос Я узнал, что MSDN не всегда точен. К сожалению, в этом случае нет никакого авторитетного определения в заголовках PSDK.
Я также проверил источники WINE, они используют 255 символов:

#define MAX_ATOM_LEN 255
...
WCHAR buffer[MAX_ATOM_LEN];

3

Решение

Кажется, достаточно легко проверить, на моей машине 255 успешно и 256 не с ERROR_INVALID_PARAMETER, Конечно, вы можете просто использовать более короткую строку.

#include <Windows.h>
#include <iostream>
#include <string>

int main()
{
const std::wstring s1(255, L'A');
const std::wstring s2(256, L'A');
ATOM a = AddAtomW(s1.c_str());
if(!a || FindAtomW(s1.c_str()) != a)
{
std::cerr << "AddAtom/FindAtom @ len 255 failed - " << GetLastError() << "\n";
}
DeleteAtom(a);
a = AddAtomW(s2.c_str());
if(!a || FindAtomW(s2.c_str()) != a)
{
std::cerr << "AddAtom/FindAtom @ len 256 failed - " << GetLastError() << "\n";
}
DeleteAtom(a);
return 0;
}
3

Другие решения

Максимальная длина действительно составляет 127 символов, согласно документации. Любая реализация может использовать более высокое значение по внутренним причинам, потому что это не влияет на правильную программу.

Другой ответ (от RetiredNinja) предполагает, что реализация должен выдает ошибку для неверного параметра. Это не так, как работает Windows.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector