经常有人提到kbmmw 4.93.10 的64 位版本没有32位版本稳定。
经过官方确认,是delphi 编译器生成64 位代码内存偏移地址的错误。
在kbmMWGlobal.pas 中
有一个函数kbmMWGetCurrentThreadID, 如下:
此函数在64 位里面,编译器出来是这个
可以看见编译出来的机器码是
$65
$48
$8B
$04
$25
$24
$00
$00
$00
这个有时会导致64 位服务器出问题。
作者已经修改了这个问题(简单粗暴而有效)。直接使用机器码来处理,
替换上面的代码。替换后结果为
运行是CPU 的指令如下:
实际上就是把偏移地址从$24 换成 $48。
这样就可以解决win64 服务器的一些不稳定的问题。
如果大家碰到的话,可以试一下。
这个问题将在下一个版本上修正。