首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于缓冲区的有关问题

2012-05-27 
关于缓冲区的问题DLL中有个函数原型是BOOL CLIENT_QueryChannelName(LONGlLoginID,char*pChannelName,intm

关于缓冲区的问题
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,如果在编译器参数指明其它的就改成其它的

热点排行