VB代码转Delphi代码,请熟悉两者的高手请进(二):中文问题
问题情景:
从硬件读取信息,其驱动 sample.dll定义了一个方法:
ReadMsg (
int iPort,
unsigned char * pucCHMsg,
unsigned int * puiCHMsgLen,
unsigned char * pucPHMsg,
unsigned int * puiPHMsgLen,
int iIfOpen
);
我在delphi中对应声明的函数则如下:
Function ReadMsg(iPort : Integer; var CHMsg;var CHMsgLen : Longint; var PHMSg; var PHMsgLen : Longint; iState : Integer) : Integer; stdcall; external 'sample.dll';
调用的时候,我定义了4个参数
CHMsgLen, PHMsgLen : Longint;
TmpCHMsg : array [0.. 256] of byte ;
TmpPHMsg : array [1.. 1024] of byte ;
其余两个参数都是传值。
调用成功后,硬件中读取的文本信息存放到了TmpCHMsg,头30个字节表示姓名,紧接着的2个字节表示婚否;其他字节表示其他信息内容,这里就不详说了。
然后我调用函数,想取头30个字节转换成字符串
TmpCHMsg[31] := $0; //让第31位变成0,当然,事先应该保存该位;
b := WideString(StrPas(@TmpCHMsg)); //b 是一个widestring变量
但是输出的b仍然是乱码。
而VB程序是这样处理的:
Dim TmpPos As Long
TmpPos = 0
ReDim TmpData(1 To 30)
CopyMemory TmpData(1), TmpCHMsg(1), 30
Label2.Caption = StrConv(TmpData, vbWide) '姓名
请问我如何修正自己的Delphi代码,使得可以得到正确的中文?