我正在尝试在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个字符,那将是很棒的,我需要更改什么来访问整个字符串?
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;