首页 > 解决方案 > Delphi访问c ++ DLL仅返回字符串中的5个字符

问题描述

我正在尝试在 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 个字符会很棒,以及我需要更改什么才能访问整个字符串?

标签: delphidllnetcdf

解决方案


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, path);
  outstr := path;
end;

推荐阅读