基于odb的dll在xp系统下动态加载运行异常的原因及解决方法

原创 2016年08月31日 16:04:23

在开发过程中发现基于odb orm框架的一个数据库访问控制dll在xp系统下动态加载运行异常,经过测试、查阅资料找到了原因及解决方案,现记录如下:

原因:

在odb中tls.hxx文件中有一个宏定义

#  ifdef ODB_THREADS_TLS_DECLSPEC
#    define ODB_TLS_POINTER(type) __declspec(thread) type*

其中有
__declspec(thread)
查阅资料发现,此句在xp及以下系统中,动态加载dll时会出现异常,msdn是这样描述的:

  • On XP systems, thread may not function correctly if a DLL uses __declspec(thread) data and it is loaded dynamically via LoadLibrary.

更多内容参见:https://msdn.microsoft.com/en-us/library/9w1sdazb.aspx

这就是使用odb后不能在xp系统下动态加载dll运行的原因。

解决方案:

在odb中,找到文件

odb\details\config-vc.h

将里面的 ODB_THREADS_TLS_DECLSPEC 宏注释之,然后重新编译所用到的odb相关文件。

至此,如果是以dll的方式使用odb,则应该是可以在xp系统下运行了。

不过我当时是以静态库的方式使用odb,修改完后不但不能在win xp运行,连win 7也不行了,后来在看了Boris的邮件后才明白问题所在。修改为dll形式调用后解决,Boris还说了另一种方式,In your case, the easiest will probably be to replicate the calls found in libodb/odb/details/win32/dll.cxx in your DynLib.dll's DllMain().。

邮件列表:http://www.codesynthesis.com/pipermail/odb-users/2016-June/003322.html

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Launcher中动态加载APK出现java.lang.SecurityException异常的解决方法(二)

在Launcher中动态加载APK,之前有出现过java.lang.SecurityException的异常, 具体的异常信息如下: 09-05 19:05:55.033: E/AndroidRunt...

关于在xp系统下CTreeCtrl控件不显示图标的一种解决方法

在最近的项目中,遇到 了这样一个比较棘手的问题,最后花了一天的时间才解决,现总结一下,以供大家参考! 问题:原来的项目工程在XP系统下用VC6编写的,一切没有问题。但由于现实需要需要在WIN7/XP系...

深度xp系统插入光盘显示上一张光盘资料解决方法

深度xp系统在插入光盘的时候会显示上一张光盘的资料,这是什么原因呢?我们到底要怎么去解决它呢?其实方法非常简单,既然有这么多朋友被这个问题所困扰的话,下面小编就给大家带来深度xp系统插入光盘显示上一张...

(超好)xp系统遇到问题解决方法总结(提供了一个解决问题库)

您在使用电脑时(在此特指XP系统)碰到问题时怎么做?您可能会直接到网上搜索解决方案,可是按下搜索,当成百上千的结果弹出来的那一刻,哪个答案才是你真正需要的呢?系统维护更多依靠的是经验,直接挪用那些老鸟...

XP系统开机慢的解决方法

首先,打开“系统属性”(在我的电脑上点右键-属性,或者在控制面板里打开“系统”,快捷键win+pause break)点“高级”选项卡,在“启动和故障恢复”区里打开“设置”,去掉“系统启动”区里的...

c# 无法加载DLL“xxxx”:找不到指定的模块(异常来自HRESULT:0X8007007E)的一个解决方法

以前的一个c#项目,今天运行的时候突然发现调用DLL时出现了下面的错误。 心中很诧异,明明以前能用的,今天怎么报错了。代码没有修改,也不存在DLL路径错误的问题。 后来看到有网友说用 depe...

XP系统蓝屏解决方法

  • 2009-01-03 10:23
  • 13KB
  • 下载

Java之——Web项目中DLL文件动态加载方法

在Java Web项目中,我们经常会用到通过JNI调用dll动态库文件来实现一些JAVA不能实现的功能,或者是一些第三方dll插件。通常的做法是将这些dll文件复制到 %JAVA_HOME%\jre\...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)