Diễn Đàn Tin Học

Hiển thị kết quả từ 1 đến 3 / 3
  1. #1
    Tham gia
    14-08-2002
    Location
    Ho Chi Minh
    Bài viết
    65
    Like
    0
    Thanked 0 Times in 0 Posts

    Cần chú ý ! Xin các cao thủ ra tay giúp đỡ

    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.


    Quote Quote

  2. #2
    Tham gia
    18-09-2002
    Location
    Ha Noi
    Bài viết
    1,138
    Like
    0
    Thanked 7 Times in 7 Posts
    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 !!!!

  3. #3
    Tham gia
    14-08-2002
    Location
    Ho Chi Minh
    Bài viết
    65
    Like
    0
    Thanked 0 Times in 0 Posts
    Anh làm được chưa

Bookmarks

Quy định

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •