这是一篇补记的内容,因为当时项目比较急,没有实时记录。部分细节可能会有一些偏差。因此也没有错误现象的截图。
出现的情况
通常,我们在做三层系统(包括手机APP应用需要连接数据库)的时候,会有较多的服务端函数需要暴露给客户端使用,写好服务端的函数后,我们会在IDE中为客户端创建对应的函数。这时会在IDE中去连接服务端程序,然后使用向导生成ClientSnapFunc。这次的问题就出在里,服务端函数完成后,IDE连接到已运行的服务端程序时就提示某DLL错误,导致无法连接到服务端程序,当然就没法生成对应的函数。
单独运行编译好的客户端程序,是可以连接到服务端程序的(但没法使用暴露的函数,很多功能就不完美了),手工去完成ClientSnapFunc当然也是可以的,但毕竟工作量会增加太多,同时也可能会增加BUG的数量。
解决过程
当时,很明确是midas.dll引起的错误。检查了Delphi目录下的midas.dll文件,检查了注册表,从检查结果来看,一切表明是正确的。理论上就不应该出现这样的错误,但他出现了,那就说明总在什么没想到的地方被忽略了。
对全盘文件进行查找,发现在一个某银行的工具软件中使用到了一个midas.dll,版本较旧。这工具用得较少,有时又需要使用,所以开初并不想卸载他。
为此,我把Delphi目录下的midas.dll文件复制到系统的system目录中,期望可以有优先被IDE找到并加载,但结果不是我想像的那样。
因为项目时间紧,也没想更多的方法与解决。最后直接是卸载了某银行的那个工具软件,让系统中只保留了Delphi现在使用的midas.dll版本文件。
总结
midas.dll版本冲突时,也是会影响程序的运行。当然,客户端使用可以uses midaslib,这样编译好的客户端就不需要附带midas.dll这个文件,也不担心版本冲突问题,但IDE不行。