昨天去聽了超圖的校園宣講會,無非都是宣揚些本公司的現狀,未來的發展,以及招聘人員來到本公司后的待遇等等。我沒太自己關注這些,大部分時間是在看新買的Multithreading Appinlication in Windows,最近很愛看書。不過宣講人說了句話,讓我印象很是深刻,他說,時不時就該做些有成就的事,否則時間長了,人都會頹廢的,原話不是這么說的,大意而已。我覺得這句話很有道理,在學校這么長時間,從來沒覺得什么事讓自己感覺很有成就;工作了這么久也是一樣,天天想著完成任務就好,從來沒想過應該超前完成點任務。大部分僅僅是為了維持生活現狀,得過且過而已。時間長了,反而覺得很是無聊,沒有什么新意。
受這句話的啟發,我決定今天就該做點有成就感的事情,把前兩天拖拉的工作完成了。其實任務說起來很簡單:項目在開發中用到了sqlite3.dll,不過在引用這個dll時,項目中用的是在project、setting 中設置的方式,(dll調用分兩種,不清楚這種調用是隱式的還是顯示的,沒分清),所以項目程序只有在sqlite3.dll 存在的情況下,才可以運行,否則運行不起來,會報錯。 項目中我的任務是做升級程序Updater.exe,在升級程序中也需要升級數據庫,因此也使用了sqlite3.dll,也是按的前面的調用方式。這種調用方式帶來的弊端是updater.exe在升級主程序時,可能會出現問題,sqlite3.dll的升級可能失?。ㄕ诒籾pdater.exe使用)。我曾想試著按另外一種方式調用sqlite3.dll導出的函數,但終究覺得導出函數的方式很復雜,而且sqlite3的導出函數封裝的不好,寫起來很費勁(這之前由于sqlite3.h 封裝不好,我們項目組一直引用它的一個封裝類CppSqlite3)。
如果按著sqlite3 導出函數(LoadLibrary,FreeLibrary)這種方式來做的話,問題來了:
1 導出函數的指針必須拿到
2 以前寫的代碼引用到CppSqlite3 的最好不要影響到

想了很久,終于我想到一個方法來解決這個問題,遂開始實施(后面在描述解決過程吧),可是由于導出函數太多,寫的我都快吐血了,一直到了早上五點,還沒全部弄完,實在是堅持不住了,就想趕緊睡會吧,一會還得上班呢。遂倒頭睡去,沒成想在睜開眼睛時,已是8點多了。