梅朵儿 發表於 2020-2-15 14:48:51

完美解决Indy 编译提示版本不一致的问题

<p><strong>1,起因</strong></p>
<p>某delphi程序A使用了Indy9.0.18组件。机器中原本自带老版本的Indy组件9.0.12,后升级到9.0.18,使用一直正常。</p>
<p>某次操作将程序A重新build all了一下,结果提示如下信息,此后即便是compile也会出错。</p>
<blockquote>
<p> uMain.pas(11): Unit IdServerIOHandlerSocket was compiled with a different version of IdServerIOHandler.TIdServerIOHandler</p>
</blockquote>
<p><strong>2,解决</strong></p>
<p>显然错误原因在于indy组件出现了交错使用,应将老版本的组件彻底删除干净。</p>
<p>先是重装Indy组件9.0.12。将Delphi7\Source\Indy目录下的文件用新版覆盖,然后重新编译。将生成的dcu拷贝到LIb目录覆盖。</p>
<p>结果问题依旧。</p>
<p>在delphi目录下搜索id文件,发现Lib\Debug下有大量id*.dcu文件。可能是这些文件是旧版的。</p>
<p>于是采用9.0.12的dcu文件将其覆盖,再次rebuild程序A,通过!</p>
<p><strong>3,分析</strong></p>
<p>那么为什么会和“Lib\Debug”目录有关呢? delphi IDE配置了搜索目录“$(DELPHI)\Lib”,但并未配置使用Lib下的Debug目录呀。</p>
<p>其实新编一个工程,放入indy新版组件组件,即使Lib\Debug下有旧版组件,rebuild也是不会出错的。</p>
<p>分析发现,这个“Lib\Debug”目录和工程配置有关。原来,本人想要debug程序A,于是在工程选项中勾选了“Use Debug DCUs”</p>
<p><img alt="" src="https://img.jbzj.com/file_images/article/202002/20200215144740.jpg" /></p>
<p>此选项将自动使用“Lib\Debug”目录的dcu文件,而不是Lib目录下的dcu。因为Lib目录下的dcu文件中不含调试信息。</p>
<p>此时我们打开IDE的debugger选项窗口,可以发现IDE使用到了“Lib\Debug”目录的dcu文件。</p>
<p><img alt="" src="https://img.jbzj.com/file_images/article/202002/20200215144800.jpg" /></p>
<p>至此问题得到了解决,并且做到了“知其然且知其所以然”!</p>
<p>以上这篇完美解决Indy 编译提示版本不一致的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持琼殿技术社区。</p>
                           
                            <div class="art_xg">
                              <b>您可能感兴趣的文章:</b><ul><li>delphi 字符串处理中的怪异现象与处理方式</li><li>解决delphi TAdoQuery组件的close方法导致”列名无效“错误的问题</li></ul>
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: 完美解决Indy 编译提示版本不一致的问题