在Windows可执行文件中执行逻辑的最后一个位置是什么?

Pat*_*ick 4 c++ windows visual-studio-2010 windows-7

在我的应用程序中,我想在最后一刻执行逻辑.越晚越好.

这样做的原因是我跟踪我的应用程序中的某些元素(数据结构,资源......),并且在应用程序结束时,例程查看这些元素并报告它们是否未正确关闭,释放,删除,...

到目前为止,我们使用了几个技巧.

第一个技巧是否决C运行时的_heap_term函数(以及C运行时的其他一些函数).优点是这非常有效,但仅限于CRT静态链接的应用程序.

第二个技巧是定义一个像这样的全局变量:

#pragma init_seg(lib)
GlobalApplicationManager s_globalApplicationManager;
Run Code Online (Sandbox Code Playgroud)

该pragma确保在所有其他全局变量之前构造此全局变量,并且 - 更重要的是 - 它在所有其他全局变量之后被破坏.这样,我们就可以将检查逻辑放在这个类的析构函数中.

问题是从Windows 7开始,在某些情况下不再调用析构函数.目前尚不清楚是什么影响了这一点,但我们确信如果我们在应用程序中成功建立Oracle连接,则不会调用它.

还有哪些其他技巧可以在应用程序中尽可能晚地执行代码?

Ben*_*igt 7

使用/ENTRYPOINT.在自定义入口点,调用CRT入口点,然后调用最终逻辑.