作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
据我了解,如果未找到所请求的 Atom,FindAtom 将返回 0。但即使在这个小代码中,根本没有任何 AddAtom,它似乎总是返回一些东西。这是为什么?这不会让带有 Ints 的 FindAtom 变得毫无用处吗? :混淆:
int main( ) {
cout << FindAtom(MAKEINTATOM(12345)); // Output: 12345
cout << FindAtom(MAKEINTATOM(2011)); // Output: 2011
return 0;
}
再见
最佳答案
签名FindAtom
功能:
ATOM WINAPI FindAtom(
__in LPCTSTR lpString
);
我在Wine中找到了以下代码svn-repository .它代表了基本逻辑:
295 ATOM WINAPI FindAtom16( LPCSTR str )
296 {
297 ATOMTABLE * table;
298 WORD hash,iatom;
299 HANDLE16 entry;
300 int len;
301
302 TRACE("%s\n",debugstr_a(str));
303
304 if (ATOM_IsIntAtomA( str, &iatom )) return iatom;
305 if ((len = strlen( str )) > 255) len = 255;
306 if (!(table = ATOM_GetTable( FALSE ))) return 0;
307 hash = ATOM_Hash( table->size, str, len );
308 entry = table->entries[hash];
309 while (entry)
310 {
311 ATOMENTRY * entryPtr = ATOM_MakePtr( entry );
312 if ((entryPtr->length == len) &&
313 (!strncasecmp( entryPtr->str, str, len )))
314 {
315 TRACE("-- found %x\n", entry);
316 return HANDLETOATOM( entry );
317 }
318 entry = entryPtr->next;
319 }
320 TRACE("-- not found\n");
321 return 0;
322 }
那么,让我们尝试跟踪程序,当它调用 FindAtom
时功能:
FindAtom(MAKEINTATOM(12345));
MAKEINTATOM
是一个宏:
#define MAKEINTATOM(i) (LPTSTR)((DWORD)((WORD)(i)))
MAKEINTATOM(12345)
返回转换为字符串指针的整数原子。FindAtom(MAKEINTATOM(12345))
if (ATOM_IsIntAtomA( str, &iatom ))
119 static BOOL ATOM_IsIntAtomA(LPCSTR atomstr,WORD *atomid)
120 {
121 UINT atom = 0;
122 if (!HIWORD(atomstr)) atom = LOWORD(atomstr);
123 else
124 {
125 if (*atomstr++ != '#') return FALSE;
126 while (*atomstr >= '' && *atomstr <= '9')
127 {
128 atom = atom * 10 + *atomstr - '';
129 atomstr++;
130 }
131 if (*atomstr) return FALSE;
132 }
133 if (atom >= MAXINTATOM)
134 {
135 SetLastError( ERROR_INVALID_PARAMETER );
136 atom = 0;
137 }
138 *atomid = atom;
139 return TRUE;
140 }
如您所见,当使用表示整数原子的参数调用时,此函数将返回指向 UINT 的指针。
然后执行正文
return iatom;
所以当你调用cout << FindAtom (MAKEINTATOM (12345));
你得到 12345 作为输出。
关于c++ - FindAtom 和 MAKEINTATOM 没用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6631812/
据我了解,如果未找到所请求的 Atom,FindAtom 将返回 0。但即使在这个小代码中,根本没有任何 AddAtom,它似乎总是返回一些东西。这是为什么?这不会让带有 Ints 的 FindAto
我是一名优秀的程序员,十分优秀!