OBJECT_ENTRY_AUTO中的困惑

haozi112 2006-06-06 10:18:02
VS2005中,ATL对对象列表的实现做了更改,使用OBJECT_ENTRY_AUTO来实现,我想学习一下这个技术,于是对结构体做了更改,其他都没有改变,为什么总是不能正确的定位呢?在下面这个测试代码中&__pobjMapEntryFirst+1的值,并不是正确的变量地址。大家帮忙看看那里错了。
另外请解释一下ATL$__a的命名,为什么不用ATL_a或者其他的,$在这里有什么特别的意思吗?
{
int i ;
}NSF_TEST_ENTRY;


#pragma section("ATL$__a", read, shared)
#pragma section("ATL$__z", read, shared)
#pragma section("ATL$__m", read, shared)

extern "C"
{
__declspec(selectany) __declspec(allocate("ATL$__a")) NSF_TEST_ENTRY* __pobjMapEntryFirst = NULL;
__declspec(selectany) __declspec(allocate("ATL$__z")) NSF_TEST_ENTRY* __pobjMapEntryLast = NULL;
}

#if !defined(_M_IA64)
#pragma comment(linker, "/merge:ATL=.rdata")
#endif

#ifndef OBJECT_ENTRY_PRAGMA

#define OBJECT_ENTRY_PRAGMA(class) __pragma(comment(linker, "/include:___pobjMap_" #class));

#endif

#define OBJECT_ENTRY_AUTO(class) \
__declspec(selectany) NSF_TEST_ENTRY __objMap_##class = {0}; \
extern "C" __declspec(allocate("ATL$__m")) __declspec(selectany) NSF_TEST_ENTRY* const __pobjMap_##class = &__objMap_##class; \
OBJECT_ENTRY_PRAGMA(class)



OBJECT_ENTRY_AUTO(a);
OBJECT_ENTRY_AUTO(b);
OBJECT_ENTRY_AUTO(c);

int _tmain(int argc, _TCHAR* argv[])
{

NSF_TEST_ENTRY** f = &__pobjMapEntryFirst+1;
NSF_TEST_ENTRY** l = &__pobjMapEntryLast;

for(NSF_TEST_ENTRY** p =f; p < l; p++ )
{
printf( "%d\n", (*p)->i) ;
}
int i = 0;
scanf("%d" , &i );
return 0;
}
...全文
348 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
aa3000 2006-06-07
  • 打赏
  • 举报
回复
不懂,帮顶
allenshi_szl 2006-06-07
  • 打赏
  • 举报
回复
mark

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧