宽字符(255或127)中原子串的最大长度是多少?

时间:2014-01-10 05:06:50

标签: c++ winapi

Atom tables reference表示它是255 字节 ,所以它给了我127个字符,但是在previous question我已经了解了MSDN不是什么永远准确。不幸的是,在这种情况下,PSDK标题中没有权威性的定义。 我还检查了WINE来源,它们使用了255个字符:

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

2 个答案:

答案 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的工作原理。