阅读器的实例是C写的,我转成Delphi后,调用SDT_ReadBaseMsg时就会出错,哪位如做过的,请指点一下
C里面的声明
int SDT_ReadBaseMsg ( int iPort,
unsigned char * pucCHMsg,
unsigned int * puiCHMsgLen,
unsigned char * pucPHMsg,
unsigned int * puiPHMsgLen,
int iIfOpen );
我Delphi里是这么写的
function SDT_ReadBaseMsg(iPort:smallint;
pucCHMsg:array of char;
puiCHMsgLen:array of smallint;
pucPHMsg:array of char;
puiPHMsgLen:array of smallint;
iIfOpen:smallint):smallint;stdcall;external 'sdtapi.dll';
C里面的声明
int SDT_ReadBaseMsg ( int iPort,
unsigned char * pucCHMsg,
unsigned int * puiCHMsgLen,
unsigned char * pucPHMsg,
unsigned int * puiPHMsgLen,
int iIfOpen );
我Delphi里是这么写的
function SDT_ReadBaseMsg(iPort:smallint;
pucCHMsg:array of char;
puiCHMsgLen:array of smallint;
pucPHMsg:array of char;
puiPHMsgLen:array of smallint;
iIfOpen:smallint):smallint;stdcall;external 'sdtapi.dll';
pucCHMsg:PChar;
puiCHMsgLen:PInteger;
pucPHMsg:PChar;
puiPHMsgLen:PInteger;
iIfOpen:Integer):Integer;stdcall;external 'sdtapi.dll';
function SDT_ReadBaseMsg(iPort:Integer;
pucCHMsg:PChar;
var puiCHMsgLen:Integer; //此处定义成变参更方便一些
pucPHMsg:PChar;
var puiPHMsgLen:Integer;
iIfOpen:Integer):Integer;stdcall;external 'sdtapi.dll';
GetMem(pucCHMsg,1024);
GetMem(pucPHMsg,1024);
GetMem(uiCHMsgLen,64);
GetMem(uiPHMsgLen,64);
错误是没跳出来了,但数据读不到,返回码是1,也就是:端口打开失败/端口尚未打开/端口号不合法
真奇怪了,前面的函数都没问题
我是这么转的
var mystr:string;
SetString(mystr,pucCHMsg,Length(pucCHMsg));
出来的mystr是乱码
是我转的有问题,还是函数调用右问题?
function SDT_ReadBaseMsg(iPort:Integer;
pucCHMsg:PChar;
var puiCHMsgLen:Integer; //此处定义成变参更方便一些
pucPHMsg:PChar;
var puiPHMsgLen:Integer;
iIfOpen:Integer):Integer;stdcall;external 'sdtapi.dll ';
调用
//...
var
pucCHMsg, pucPHMsg: PChar;
iPort, puiCHMsgLen, puiPHMsgLen: Integer;
begin
//..
GetMem(pucCHMsg, 1024);
GetMem(pucPHMsg, 1024);
SDT_ReadBaseMsg(iPort, pucCHMsg, puiChMsgLen, pucPHMsg, puiPHMsgLen, 1 );
//..
end; puiChMsgLen, puiPHMsgLen 声明为整形, 无需申请空间, 再试一下吧
天河
等 级:
发表于:2007-09-24 12:11:149楼 得分:0
一样的,也是乱码
应该是函数产生出来右问题
............................
我想多半是转码问题