获取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. 疑人不用,用人不疑!要相信别人可以做好,不知道怎么做,就教他好了!千万别临阵易将,给人的感觉应该很不好!

猜你喜欢

转载自blog.csdn.net/HarmonyFairly/article/details/80822469