读书人

关于缓冲区的有关问题

发布时间: 2012-05-27 05:42:30 作者: rapoo

关于缓冲区的问题
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);

[解决办法]

Delphi(Pascal) code
  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,如果在编译器参数指明其它的就改成其它的

读书人网 >.NET

热点推荐