昨天去听了超图的校园宣讲会,无非都是宣扬些本公司的现状,未来的发展,以及招聘人员来到本公司后的待遇等等。我没太自己关注这些,大部分时间是在看新买的Multithreading Appinlication in Windows,最近很爱看书。不过宣讲人说了句话,让我印象很是深刻,他说,时不时就该做些有成就的事,否则时间长了,人都会颓废的,原话不是这么说的,大意而已。我觉得这句话很有道理,在学校这么长时间,从来没觉得什么事让自己感觉很有成就;工作了这么久也是一样,天天想着完成任务就好,从来没想过应该超前完成点任务。大部分仅仅是为了维持生活现状,得过且过而已。时间长了,反而觉得很是无聊,没有什么新意。
受这句话的启发,我决定今天就该做点有成就感的事情,把前两天拖拉的工作完成了。其实任务说起来很简单:项目在开发中用到了sqlite3.dll,不过在引用这个dll时,项目中用的是在project、setting 中设置的方式,(dll调用分两种,不清楚这种调用是隐式的还是显示的,没分清),所以项目程序只有在sqlite3.dll 存在的情况下,才可以运行,否则运行不起来,会报错。 项目中我的任务是做升级程序Updater.exe,在升级程序中也需要升级数据库,因此也使用了sqlite3.dll,也是按的前面的调用方式。这种调用方式带来的弊端是updater.exe在升级主程序时,可能会出现问题,sqlite3.dll的升级可能失败(正在被updater.exe使用)。我曾想试着按另外一种方式调用sqlite3.dll导出的函数,但终究觉得导出函数的方式很复杂,而且sqlite3的导出函数封装的不好,写起来很费劲(这之前由于sqlite3.h 封装不好,我们项目组一直引用它的一个封装类CppSqlite3)。
如果按着sqlite3 导出函数(LoadLibrary,FreeLibrary)这种方式来做的话,问题来了:
1 导出函数的指针必须拿到
2 以前写的代码引用到CppSqlite3 的最好不要影响到

想了很久,终于我想到一个方法来解决这个问题,遂开始实施(后面在描述解决过程吧),可是由于导出函数太多,写的我都快吐血了,一直到了早上五点,还没全部弄完,实在是坚持不住了,就想赶紧睡会吧,一会还得上班呢。遂倒头睡去,没成想在睁开眼睛时,已是8点多了。