佚名通过本文主要向大家介绍了云的com操作支持库,初始化com支持库失败,com的支持,支持dr.com的wifi,com支持库等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: COM 里面不支持TLSThread Local Storage 吗?
描述:
解决方案1:
描述:
我在COM里面写了下面的代码出错了:
__declspec(thread) static int num = 321;
void test()
{
int i = num; // got an error " Access violation reading location 0x00000000."
num = 332211;
Sleep(5000);
i = num;
}
然而这个代码在普通的dll中可以运行。
如果com不支持的话,我想问下在com有个static的全局变量,如果想在com里面实现多线程,而且每个线程都能单独维护自己的这个static的全局变量,如何做到?
谢谢!
解决方案1:
你的客户端也是VC的程序吗?
这种静态的TLS定义有些危险"__declspec(thread)"。就是LoadLibrary有可能不初始化__tls_index,这样你就出现0x000000了(因为你的__tls_index没有初始化)。 COM 其实就是个LoadLibrary,我估计很可能没有叫LdrInitializeTls。(不敢100%肯定,我得查一下)。但是静态使用在Kernel初始化的时候100%会叫这个。
你随便写个程序,直接LoadLibrary=》Test,看有没有类似问题。 还是尽量少用TLS了,如果一定要用还是动态分配安全些。