1

我有一个类包含:

class SomeClass {
    SomeClass *previous;
    static __declspec(thread) SomeClass *stackTop;

public:
    SomeClass() : previous(stackTop) { stackTop = this; }
    ~SomeClass() { stackTop = previous; }
};

__declspec(thread) SomeClass *SomeClass::stackTop = NULL;

这对于目标编译得很好Win32,但是当编译Pocket PC 2003 (ARMV4)失败并出现错误 C2485 时:

error C2485: '$I' : unrecognized extended attribute

在我在构造函数和析构函数中设置成员的两个地方SomeClass以及在我实例化的所有地方SomeClass(它被实例化为自动变量并且需要知道堆栈上更高的下一个实例在哪里)。

不幸的是,该错误在 MSDN 中没有有意义的文档,并且该错误的文档__declspec(thread)也没有指出在任何情况下它都不起作用。我确实检查thread了预处理器中未定义的内容。

4

1 回答 1

0

我不相信那个版本的 Pocket PC (Windows CE) 支持__declspec(thread)属性 (TLS)。这将解释为什么只有在为 Pocket PC 而不是为 Win32 编译时才会出现这种情况。请参阅以下链接:

于 2011-02-08T09:40:39.803 回答