在dll内 不熟悉__declspec(thread)的话 尽量不要用

本文探讨了一个DLL在Windows XP与Windows 7系统间的问题:当该DLL使用了__declspec(thread)声明的变量时,在XP系统上运行会崩溃。文章提及这可能与DLL初始化过程中的线程局部存储(TLS)有关。
部署运行你感兴趣的模型镜像

  有个 dll 在win7 系统正常 

放到xp系统 访问了 __declspec(thread) 变量 就直接挂掉 

最后看了下 windows核心编程上的 "线程局部储存" 部分 ,看起来是跟dll初始化部分有关系.

但是还没有时间仔细研究 最后只能放弃在这个dll中使用线程局部储存


希望对大家有用

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

### 创建DLL项目 在Visual Studio 2019中创建一个新的动态链接库(DLL)项目,可以通过文件菜单中的新建项目选项来实现。选择“Windows 控制台应用程序”,然后更改应用类型为“动态库 (.dll)”[^1]。 ```cpp // dllmain.cpp : 定义 DLL 应用程序的入口点。 #include "pch.h" BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } ``` 此代码段展示了`DllMain`函数的一个基本模板,它是每一个DLL都必需的一部分,在加载或卸载时会被操作系统自动调用。 ### 编写导出函数 为了使其他程序能够访问DLL内部的功能,需要定义一些公开的方法供外部调用。这通常通过声明带有`__declspec(dllexport)`关键字的函数完成。下面是一个简单的例子: ```cpp extern "C" __declspec(dllexport) int add(int a, int b){ return a + b; } ``` 这段代码定义了一个名为`add`的整数加法运算函数,并将其标记为可被外界使用的API之一[^4]。 ### 构建解决方案 当所有的源码编写完毕之后,就可以编译整个工程了。点击顶部菜单栏上的构建按钮下的生成解决方案命令即可开始编译过程。如果一切顺利的话,在项目的输出路径下将会看到生成好的`.dll`文件[^2]。 对于64位系统的默认设置,默认情况下会生成于`x64\Debug\dll_triples.dll`这样的位置;如果是32位版本,则会在相应的Win32子目录里找到它。 ### 验证DLL有效性 最后一步是确认所制作出来的DLL确实包含了预期要暴露出去的功能接口。这时可以借助第三方软件如eXeScope来进行查看和检验[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值