PDA

View Full Version : Xin các cao thủ ra tay giúp đỡ



Nguyen Thanh Binh
24-09-2002, 16:45
Em click vào "File" --> "New" --> "ActiveX" --> "DLL" và gõ vào như sau :

library SAMF;

uses
ComServ,
SysUtils,
Windows,
Messages,
Classes,
SAMF_TLB in 'SAMF_TLB.pas';

{$R *.TLB}

{$R *.RES}

Procedure CutIt(LargeFileName : String; MaxFile : Integer);stdcall; export;

var
i : Integer;
LargeFile : TFileStream;
SmallFile : TFileStream;
FName, Ext : String;
F : File;
DivSize : Integer;
NewName : String;
PBuff : PChar;
fSize, Size : LongInt;

begin
AssignFile(F,LargeFileName);
fSize:=FileSize(F);
CloseFile(F);

Ext:=ExtractFileExt(LargeFileName);
FName:=Copy(LargeFileName,0,length(LargeFileName)-length(ext));

LargeFile:=TFileStream.Create(LargeFileName,fmOpen Read);
DivSize:=fSize div MaxFile;

For i:=1 to MaxFile do begin
if i<10 then
NewName:=FName + '.00' + IntToStr(i)
else
NewName:=FName + '.0' + IntToStr(i);

if i<MaxFile then Size:= DivSize else Size:=fSize-(i-1)*DivSize;
PBuff:=AllocMem(Size);
SmallFile:=TFileStream.Create(NewName,fmCreate or fmOpenWrite);
LargeFile.Read(PBuff^,Size);
SmallFile.Destroy;

FreeMem(PBuff,Size);
end;

LargeFile.Destroy;
end;

exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer,
CutIt index 1;

begin
end.

Đoạn mã trên do em xem trong một cuốn sách về Visual Basic và Delphi. Nó dùng để cắt tập tin lớn ra làm nhiều tập tin nhỏ. Em chỉ bắt đầu tìm hiểu Delphi cách đây một tuần thôi nên không rõ lắm nó đã sai gì mà khi chạy bằng một chương trình khác làm bằng Delphi :
...
implementation
procedure.....
//có khai báo đủ, bảo đảm gọi hàm đúng cách
procedure TForm1.Button1Click(Sender: TObject);
begin
CutIt('asasas.dll',2);
end;
end.
...

thì có lỗi như sau :

"Project Project1.exe raised exception class EInOutError with message 'I/O error
103'. Process stopped. Use Step or Run to continue."

Khi click OK của hộp thông báo lỗi và cho chạy tiếp thì lại có lỗi :

"Exception EInOutError in module SAMF.dll at 000420D3."

Khi sử dụng bằng Visual Basic thì chương trình chẳng những không chạy mà Windows còn hiện một thông báo nói rằng Visual Basic có lỗi và bảo em Send cái lỗi đó cho Microsoft rồi tắt luôn Visual Basic.

Xin hỏi em đã sai gì trong đoạn dll trên. Xin các cao thủ chỉ giúp. Xin cám ơn.


:(

real_time
25-09-2002, 14:29
lam sao biet duoc !!!!! nhung theo minh no la loi vao ra con sai cu the the nao minh chua thu doi xem lai da nhe !!!!

Nguyen Thanh Binh
04-10-2002, 13:12
Anh làm được chưa