delphi函数的问题!!!!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi函数的问题!!!!相关的知识,希望对你有一定的参考价值。
forcedirectories和CreateDirectory
都可以创建文件夹,它们有什么区别呢
还有具体是怎么用的,希望能说清楚点
最好给个例子~!~!
如果你创建一个目录为c:\mymusic\music
如果你的C盘不存在一个叫mymusic的文件夹
的话程序会自动创建,函数执行的结果是,
创建了两个文件夹,mymusic和music,music为
mymusic的子文件夹.
CreateDirectory只能创建一个文件夹,如果
mymusic不存在,则反回创建music文件夹失败! 参考技术A ForceDirectories能创建多层目录,而CreateDirectory只能创建一层! 参考技术B ForceDirectories可以创建多层目录,比如:你创建一个目录为c:\nihao\123如果你的C盘不存在一个叫nihao的文件夹的话,会自动创建,函数执行的结果是,创建了两个文件夹,nihao 和123,123为nihao的子文件夹
CreateDirectory只能创建一个文件夹,如果nihao 不存在,则反回创建123文件夹失败!
Delphi调用Dll返回结构体的问题?
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;
调用约定都试过了,还是不行。
调用约定都试过了,还是不行。这个也试过了的,不行。
追答buf^ := uv_buf_init(@s, 5); //试试追问这样也不行的。
追答//定义uv_buf_t = record
len: ULONG;
base: PAnsiChar;
end;
puv_buf_t= ^uv_buf_t;
//函数
var ppi:puv_buf_t
begin
ppi :=allocmem(sizeof(uv_buf_t));
....
....
....
end;本回答被提问者和网友采纳
以上是关于delphi函数的问题!!!!的主要内容,如果未能解决你的问题,请参考以下文章