Atom tables reference表示它是255 字节 ,所以它给了我127个字符,但是在previous question我已经了解了MSDN不是什么永远准确。不幸的是,在这种情况下,PSDK标题中没有权威性的定义。 我还检查了WINE来源,它们使用了255个字符:
#define MAX_ATOM_LEN 255
...
WCHAR buffer[MAX_ATOM_LEN];
答案 0 :(得分: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;
}
答案 1 :(得分:1)
根据文档,最大长度确实为127个字符。由于内部原因,任何实现都可能使用更高的值,因为这不会影响任何正确的程序。
另一个答案(来自RetiredNinja)假设实现必须为无效参数提供错误。这不是Windows的工作原理。