我已经将项目从Delphi 7移植到了Delphi2010。添加了一些类型转换后,我的项目现在运行良好,并且除程序的主要功能(绑定到COM端口和MSCOMM ActiveX组件)外,所有功能均正常工作。

它可以从COM端口读取和写入,但是这似乎有问题,因为连接到该端口的设备返回错误代码,尽管它可以与Delphi7中的相同代码正常工作。在代码中,将一些字节发送到设备后,您可以在下面看到一个字节作为校验和发送。另一方面,如果接收到的校验和与计算出的校验和相等,则设备将获取字节并使用相同的公式计算校验和。设备将OK返回“ O”,否则将Error返回“ E”。 OutCom被定义为Olevariant。

OutCom := chr(ord(Fbyte));
Mscomm1.Output := OutCom;

OutCom := chr(ord(Sbyte));
Mscomm1.Output := OutCom;

OutCom := chr(ord(DigitOne));
Mscomm1.Output := OutCom;
OutCom := chr(ord(DigitTwo));
Mscomm1.Output := OutCom;
OutCom := chr(ord(DigitThree));
Mscomm1.Output := OutCom;
SumOfBits := (System_No - 1) + Fbyte + Sbyte + DigitOne + DigitTwo + DigitThree;

CheckSum := ( (SumOfBits mod 256) xor 255 ) + 1;

OutCom := chr(ord(CheckSum));
Mscomm1.Output := OutCom;

OutCom := 'E';
Mscomm1.Output := OutCom;
OutCom := 'N';
Mscomm1.Output := OutCom;


Delphi 2010中的相同代码返回不同的结果。我猜想chr()函数返回的结果与Delphi7不同。如果这是真的,那么我如何获取字节的Ascii字符,或者有什么方法可以将字节传递给Mscomm而不转换为char?

最佳答案

Chr现在返回Unicode WideChar(在Delphi 2009之前,它返回一个单字节的AnsiChar)。

最简单的解决方案是将字节值类型转换为ansischar:

var_ansichar := AnsisChar(var_byte);


而不是使用Chr()。但是请注意Mghie所说的。确保您的组件,声明的变量等的类型正确(AnsiChar,AnsiString等)。

关于delphi - MsComm ActiveX是否与Delphi 2010兼容?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2261240/

10-15 03:32