静态TLS回调在main函数之前执行
但是在VS2008的Release下会失效
主要是因为在链接的时候被设置为/OPT:REF导致该函数被优化掉
解决方法如下2种
1. 更改/OPT:REF为/OPT:NOREF
2. 使用/INCLUDE强制符号引用
我比较倾向于第二种方案
下面贴出简单的代码
// main.cpp
#include <Windows.h>
void WINAPI My_tls_callback(PVOID h, DWORD reason, PVOID pv)
{
// 相关代码。。。
printf("in My_tls_callback\n");
}
#pragma comment(linker, "/INCLUDE:__tls_used")
#pragma section(".CRT$XLB",long,read)
extern "C" __declspec(allocate(".CRT$XLB")) PIMAGE_TLS_CALLBACK _xl_y = My_tls_callback;
#pragma comment(linker, "/INCLUDE:__xl_y")
int _tmain(int argc, _TCHAR* argv[])
{
printf("hello world\n");
return 0;
}
为原创 转载请注明出处!谢谢!