獲取activemq-cpp.dll的版本號

獲取activemq-cpp.dll的版本號

需求

因產品的平臺庫中的dll被未知人員修改,導致產品在使用activemq-cpp.dll取activemq的消息時,程序異常!經調試及測試,發現是修改後的dll存在問題(更換爲未修改的產品的平臺庫中的的activemq-cpp.dll後,不再異常);需要重新編譯該dll,但是因平臺庫之前的管理不完善,沒有保存該dll的版本信息,需要使用之前相同的版本,否則所有依賴該dll的功能都需要重新測試,工作量大;或者更換爲可用的dll,但平臺管理員仍然需要版本號

解決過程

  1. 查看其依賴的庫“libapr”的頭文件,發現有一個名爲“apr_version.h”,打開文件,如圖:版本號
    在網上查過該庫的源碼就知道apr的版本號的組成爲“1.5.2”,說明平臺中使用的apr的版本就是1.5.2
  2. 同理,去查看activemq-cpp的頭文件(或者源文件),很遺憾,沒用以version結尾的頭文件,此方法失效?使用“version”關鍵詞在activemq-cpp的頭文件(或者源文件)中查找,如圖查找version
    查找結果,如圖:這裏寫圖片描述,在網上下載任一個版本的源碼,查看實現,發現,getProviderVerdion()中返回的是activemq-cpp庫的版本號的全稱。
  3. 現在知道是什麼函數了,說明在沒有源碼的情況下,只有運行起來,才能知道版本號了,可是怎麼調用呢?查看這個類的註釋,如圖這裏寫圖片描述
    調試過onmessage函數時,發現,要接受消息需要先創建連接,而這個連接就是“ActiveMQConnection”。這表明需要在初始化的時候添加測試代碼。如圖:這裏寫圖片描述
    得到我需要的版本號:3.8.4;

延伸思考

  1. 一個庫需要有明顯的版本號,像APR的庫一樣,應該在頭文件中可以直接查看。
  2. 一個庫需要有運行時可查詢版本號的接口,以保證產品的兼容性。
  3. 回到問題產生的原因上來,這個問題由平臺調整引起,應該由平臺負責人解決此問題,問題在定位後,應該轉給他們,而不是我這邊去查找版本號,編譯文件什麼的。換言之,這不是我的職責所在。
  4. 作爲平臺的管理者,不知道自己提交的dll是什麼版本?這也是理由?既然不知道版本,當初你憑什麼敢爲何提交?
  5. 沒有完備的測試體系,不能隨便修改平臺的內容,否則,整個產品都遭殃,或者你有足夠的人力去把所有的功能都測試一遍!
  6. 除了dll庫需要有完整的版本信息外,存儲的數據,也應該有相應的版本信息,以便多個版本間的產品能夠兼容!
  7. 兼容性,太重要,沒有誰願意去重寫以前的代碼,或者把以前的配置,在你的新產品上重新配置一遍!
  8. 要搞清楚自己的職責,不在職責範圍內的事,就不要做了,一來,你不一定能做好,二來,你做好了,也沒人感激你,三來,有這個時間,你提升下自己的能力吧,看你閒的。
  9. 疑人不用,用人不疑!要相信別人可以做好,不知道怎麼做,就教他好了!千萬別臨陣易將,給人的感覺應該很不好!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章