基于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...

动态加载DLL界面方法

  • 2017年11月27日 10:46
  • 52KB
  • 下载

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

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

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

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

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

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

小米2不能连电脑 XP系统无法安装MTP设备驱动的终极解决方法

小米2刚到货,用电脑访问SD卡,抓心挠肝的捅咕了2天,终于把我的XP系统驱动了MTP,  @. D2 w) n5 _& M, w2 j9 p; U- ] 悲催的Android,悲催的小米2,悲催的小...
  • sdvch
  • sdvch
  • 2013年10月23日 20:53
  • 36194

重装Windows XP系统之后如何恢复Linux启动选单 以及boot设置 解决方法

一键还原时你把linux在C盘的引导文件删掉了,而且boot.ini文件还原成了xp以前的 你需要把你linux安装的那个硬盘下的wubildr和wubildr.mbr复制到C盘下 并且显示C盘隐藏...

XP系统蓝屏解决方法

  • 2009年01月03日 10:23
  • 13KB
  • 下载

javascript中采用jQuery ajax动态加载js文件的解决方法

var Env = new function () { this.envPath = null; this.getPath = function () { this.e...
  • hsg77
  • hsg77
  • 2016年04月19日 19:09
  • 2592
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于odb的dll在xp系统下动态加载运行异常的原因及解决方法
举报原因:
原因补充:

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