7

这是测试代码

#include "windows.h"
#include "iostream"
using namespace std;

__declspec(thread) int tls_int = 0;

void NTAPI tls_callback(PVOID, DWORD dwReason, PVOID)   
{
    tls_int = 1;
}

#pragma data_seg(".CRT$XLB")
PIMAGE_TLS_CALLBACK p_thread_callback = tls_callback;
#pragma data_seg()

int main()
{
    cout<<"main thread tls value = "<<tls_int<<endl;

    return 0;
}

使用多线程调试 DLL (/MDd) 构建运行结果:主线程 tls 值 = 1

使用多线程调试 (/MTd) 运行结果构建:主线程 tls 值 = 0

看起来无法捕获使用 MTd 时创建的主线程

为什么 ?

4

2 回答 2

15
于 2016-04-27T13:47:52.180 回答
1

您还必须显式添加符号 __tls_used。有了这个,你的代码应该可以工作:

#pragma comment(linker,"/include:__tls_used")
于 2016-01-03T10:36:39.513 回答