delphi – 什么可能导致System.Move偶尔给出错误的结果?
发布时间:2020-12-15 09:35:39 所属栏目:大数据 来源:网络整理
导读:最近几天,我们遇到了由第三方开发的数据库组件的一些奇怪问题.几个月来这些组件一直没有变化. HAS最近几天更改的代码是我们自己的代码,我们还更新了由另一个第三方开发的gui组件. 调试后我发现在其中一个数据库组件过程中调用System.Move偶尔会给出错误的结
最近几天,我们遇到了由第三方开发的数据库组件的一些奇怪问题.几个月来这些组件一直没有变化.
HAS最近几天更改的代码是我们自己的代码,我们还更新了由另一个第三方开发的gui组件. 调试后我发现在其中一个数据库组件过程中调用System.Move偶尔会给出错误的结果! 请从数据库组件中查看以下代码并阅读我的评论.这种不一致的行为怎么会发生? 编辑:看看下面链接的博客帖子.它似乎与我的问题有关.至少当我读到它时,它确认System.Move会给出错误的结果: 编辑: Procedure InternalDescribe; var cbufl: sb4; //sb4=LongInt cbuf: array[0..30] of char; cbufp: PChar; //.... begin //..Some code repeat //...Some code to initialize cbufp and cbufl //On the 15. iteration the values immediately Before Move are always these: //cbufp = 'STDPRODUCTSTOREDELEMENTSCOUNT' //cbuf = ('S','T','A','U','S',#0,'E','V','R','C','I','D',#0) //cbufl = 29 Move(cbufp^,cbuf,cbufl); //Values immediately After Move should then be: //cbuf = ('S','P','O','L','M','N',#0) //But sometimes this Move results in this value( 1 in 5..15 times): //cbuf = ('S',#0) } until SomeCondition; //...Some more code end; 解决方法
移动不会给出错误的结果,或者至少我从未见过它的任何情况.你更有可能在缓冲区中遇到意想不到的东西.尝试在此例程中添加对Windows.OutputDebugString的调用,以查看您之前和之后要复制的内容.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |