Delphi调用Dll返回结构体的问题?

C写的一个动态库,其中有些函数的返回值为结构体(非指针),然后在Delphi里调用,得到的返回结果是错误的。例如,在C里面:结构体:typedefstructuv_buf... C写的一个动态库,其中有些函数的返回值为结构体(非指针),然后在Delphi里调用,得到的返回结果是错误的。
例如,在C里面:
结构体:
typedef struct uv_buf_t {
ULONG len;
char* base;
} uv_buf_t;
导出的函数:
uv_buf_t uv_buf_init(char* base, unsigned int len) {
uv_buf_t buf;
buf.base = base;
buf.len = len;
return buf;
}
在Delphi里:
对应C的结构体:
uv_buf_t = record
len: ULONG;
base: PAnsiChar;
end;
函数声明为:
uv_buf_init: function(base: PAnsiChar; len: Cardinal): uv_buf_t;
在Delphi中调用:
procedure test2;
var
buf: uv_buf_t;
s: PAnsiChar;
begin
s := 'abcde';
buf := uv_buf_init(@s, 5);
Writeln('buf的值:len=' + IntToStr(buf.len) + ' base=' + buf.base);
end;
最终的结果是错误的,而且会导致传到C中的参数的值也不对,如果把C库中函数的返回值和Delph声明函数的返回值都改为指针就一点问题都没有,但是我们是不能动C代码的,只能接收返回的结构体,不知哪位高手有解决办法或思路,在此先谢过了。
uv_buf_init: function(base: PAnsiChar; len: Cardinal): uv_buf_t; cdecl;
调用约定都试过了,还是不行。
展开
 我来答
匿名用户
2014-11-05
展开全部
那就看你的结构体和传参是否正确了,你光这样瞎说,没人看的出问题。起码关键代码和大致错误贴出来.
台浦泽4r
2014-11-04 · TA获得超过937个赞
知道小有建树答主
回答量:1249
采纳率:62%
帮助的人:641万
展开全部
uv_buf_init: function(base: PAnsiChar; len: Cardinal): uv_buf_t;stdcall;
更多追问追答
追问
调用约定都试过了,还是不行。这个也试过了的,不行。
追答
buf^ := uv_buf_init(@s, 5);  //试试
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式