关于缓冲区的问题
DLL中有个函数原型是BOOL CLIENT_QueryChannelName(
LONG lLoginID,
char *pChannelName,
int maxlen,
int *nChannelCount,
int waittime=2000
);
Parameters
[in]lLoginID
CLIENT_Login的返回值
[out]pChannelName
通道名缓冲区(一般每个通道名是32字节长,这里需分配16*32字节长度的缓冲)
[in]maxlen
缓冲区长度,(单位字节)
[out]nChannelCount
总共通道数
[in]waittime
等待时间
。
翻译成DELPHI是不是function CLIENT_QueryChannelName(aLoginID: LongInt;
var pChannelName:Pchar;
maxlen: Integer;
var nChannelCount: Integer;
aWaittime: Integer = 1000
): Boolean; stdcall external DH_NET_SDK;
在调用函数后,怎么读取pChannelName的值?是不是
procedure TForm1.Button1Click(Sender: TObject);
var
pChannelName :Pchar;
nChannelCount:integer;
cret :boolean;
Channelname :string;
begin
getmem(pChannelName,512);
cret:=CLIENT_QueryChannelName(loginID,pChannelName,512,nChannelCount,1000);
Channelname:=StrPas(pChannelName);
[解决办法]
procedure GetChannelNames(PChannelNames: PChar); begin StrCopy(PChannelNames,PChar('1234567890123456654321098765432112345678901234566543210987654321')); end; type TChannelNames = record Name1: array[0..15] of Char; Name2: array[0..15] of Char; Name3: array[0..15] of Char; Name4: array[0..15] of Char; EndChar: Char; end;var ChannelNames: TChannelNames;begin FillChar(ChannelNames,SizeOf(TChannelNames),0); GetChannelNames(PChar(@ChannelNames)); ShowMessage(ChannelNames.Name1 + '|' + ChannelNames.Name2 + '|' + ChannelNames.Name3 + '|' + ChannelNames.Name4);
[解决办法]
BOOL CLIENT_QueryChannelName(
LONG lLoginID,
char *pChannelName,
int maxlen,
int *nChannelCount,
int waittime=2000
);
function CLIENT_QueryChannelName(
aLoginID: LongInt;
pChannelName:PChar;
maxlen: Integer;
var nChannelCount: Integer;
aWaittime: Integer = 1000
): Integer;cdecl;external DH_NET_SDK;
c语言默认是cdecl,如果在编译器参数指明其它的就改成其它的