Delphi访问c ++ DLL仅返回字符串中的5个字符

问题描述 投票:0回答:1

我正在尝试在Delphi中使用C .dll并已转换头文件。当我尝试从.dll返回一个字符串时,我感到困惑。函数的C定义是:

EXTERNL int
nc_inq_path(int ncid, size_t *pathlen, char *path);

我的Delphi等效项是:

function nc_inq_path( ncid : Integer; var pathlen : Cardinal; var path : AnsiChar): Integer; cdecl; external 'netCDF.dll'; 

然后我使用了以下功能

var
  ncid : Integer;
  res : Integer;
  pathlen : Cardinal;
  pathChar : AnsiChar;
  ppathChar : PansiChar;
  outstr : String;
begin
  res := nc_create(PAnsiChar(FILENAME), NC_CLOBBER, ncid);
  res := nc_inq_path(ncid, pathlen, pathChar);
  ppathChar := Addr(pathChar);
  outstr := Ppathchar;
end;

变量outstr仅保留路径的前5个字符,即“ C:\ Us”。

如果有人能告诉我为什么它只给我5个字符,那将是很棒的,我需要更改什么来访问整个字符串?

delphi dll netcdf
1个回答
0
投票
function nc_inq_path( ncid : Integer; var pathlen : Cardinal; var path : AnsiChar): Integer; cdecl; external 'netCDF.dll'; 

应更改为

function nc_inq_path( ncid : Integer; var pathlen : Cardinal; path : PAnsiChar): Integer; cdecl; external 'netCDF.dll'; 

而且我认为这些代码会起作用

var
  ncid : Integer;
  res : Integer;
  pathlen : Cardinal;
  path : array [0..255] of AnsiChar;
  outstr : String;
begin
  pathlen = 256;
  res := nc_create(PAnsiChar(FILENAME), NC_CLOBBER, ncid);
  res := nc_inq_path(ncid, pathlen, @pathChar[0]);
  outstr := pathchar;
end;
© www.soinside.com 2019 - 2024. All rights reserved.