主题:  哪位帮忙看一下delphi的ucd,问题在哪呢?

阿璇

职务:普通成员
等级:1
金币:9.0
发贴:131
#12004/3/31 16:34:35
想用Delphi自己写一个返回文件字节数的u32,主要用于教别人,呵呵,演砸了,2M多的文件竟返回1.6M多,还有返回负值,请高手帮我看看,我就是想弄明白。
Delphi项目文件如下:

//返回一个文件的字节数
library Project1;

uses
Windows, SysUtils, Variants, Classes, StdCtrls;

{$R *.res}
{$R mxx.res}
function myfilesize(anyfile:Pchar):Integer;stdcall;
var
str_anyfile:string;
filebyte:integer;
myfile:file;
begin
str_anyfile:=strpas(anyfile);
if FileExists(str_anyfile)then
begin
AssignFile(myfile,str_anyfile);
reset(myfile,1);
filebyte:=filesize(myfile);
closefile(myfile);
result:=filebyte;
end
else
result:=-1;
end;
exports
myfilesize name 'Mxx_FileSize';
begin
end.

未编译的资源文件如下:

1 DLL_HEADER LOADONCALL DISCARDABLE
BEGIN
"Mxx_FileSize\0",
"\0"
END
Mxx_FileSize DLL_HEADER LOADONCALL DISCARDABLE
BEGIN
"\0",
"I\0",
"S\0",
"result:=Mxx_FileSize(""anyfile""\r\n"
"\r\n"
"功能:返回指定的文件名anyfile的长度,成功则返回文件的字节数,否则返回-1。\r\n"
END

请高手帮看看,谢谢,我只是懂一点点Delphi编程,哪弄错了,确实不知道。谢谢。



滨滨

职务:版主
等级:4
金币:13.0
发贴:1931
#22004/4/2 22:51:04
library Project1;
uses
SysUtils, Classes;

{$R *.res}
{$R mxx.res}

function myfilesize(anyfile:Pchar):integer;stdcall;
var
myfile:file of byte;
begin
if FileExists(anyfile)then
begin
AssignFile(myfile,anyfile);
Reset(myfile);
result:=FileSize(myfile);
CloseFile(myfile);
end
else
result:=-1;
end;

exports
myfilesize name 'Mxx_FileSize';
begin
end.

资源文件:
1 DLL_HEADER LOADONCALL DISCARDABLE
BEGIN
"Mxx_FileSize\0",
"\0"
END
Mxx_FileSize DLL_HEADER LOADONCALL DISCARDABLE
BEGIN
"\0",
"L\0",
"S\0",
"result:=Mxx_FileSize(""anyfile"")\r\n"
"\r\n"
"功能:返回指定的文件名anyfile的长度,成功则返回文件的字节数,否则返回-1。\r\n"
END