delphi - 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 个字符会很棒,以及我需要更改什么才能访问整个字符串?
解决方案
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;
推荐阅读
- c - 辛科去哪儿了?(海合会 c)
- python - transaction.atomic 是否有可能无法按预期工作?
- php - 自定义搜索文本字段位置数据表
- python - 如何更改在 QML 中具有多个音轨的视频的音轨
- optimization - Pytorch:如何针对多重损失优化多个变量?
- git - 如何将服务器端挂钩添加到 GitLab?
- node.js - '对 https://www.googleapis.com/oauth2/v4/token 的请求失败,原因:无法获取本地颁发者证书。节点JS
- c# - SetThreadDesktop 没有将表单切换到另一个桌面
- apache-kafka - Kafka Stream KTable 延迟
- django - Django 中的 PostgreSQL 文本搜索未按预期工作