نمایش نتایج 1 تا 4 از 4

نام تاپیک: مقاله: استفاده از DLL ها در دلفی

  1. #1

    مقاله: استفاده از DLL ها در دلفی

    استفاده از DLLها در دلفی
    ایجاد یک DLL
    با استفاده از منو فایل گزینه New Items را انتخاب کنید و آیتم DLL Wizard را انتخاب نمایید. حال به فایل ایجاد شده، یک فرم با استفاده از روش بالا اضافه نمایید. دقت نمایید که Application را بجای فرم انتخاب ننمایید. حال اگر فرض کنیم که نام فرم شما Demo باشد و بانام UDemo.pas آنرا ذخیره کرده باشید. باید در فایل DLL بصورت زیر کد نویسی نمایید:





    library demodll;

    { Important note about DLL memory management: ShareMem must be the
    first unit in your library's USES clause AND your project's (select
    Project-View Source) USES clause if your DLL exports any procedures or
    functions that pass strings as parameters or function results. This
    applies to all strings passed to and from your DLL--even those that
    are nested in records and classes. ShareMem is the interface unit to
    the BORLNDMM.DLL shared memory manager, which must be deployed along
    with your DLL. To avoid using BORLNDMM.DLL, pass string information
    using PChar or ShortString parameters. }

    uses
    SysUtils,
    Classes,
    UDemo in 'UDemo.pas' {Demo};

    {$R *.res}
    procedure ShowdemoForm;stdcall;
    begin
    Demo :=Tdemo.Create(nil);
    demo.Show;
    end;

    function ShowdemoFormModal:integer;stdcall;
    begin
    demo :=Tdemo.Create(nil);
    Result := demo.ShowModal;
    end;

    Exports
    ShowDemoForm,
    ShowdemoFormModal;
    begin
    end.




    دقت کنید که نام DLL فوق DemoDll می باشد و با نام DemoDll.dpr ذخیره گردیده است.

    حال بر روی فرم موجود تمام دکمه‌ها و آبجکت‌های مورد نظرتان را اضافه و کد نویسی کنید (اختیاری). در پایان در منو Project گذینه Build DemoDll را انتخاب کرده و اجرا نمایید. فایلی با نام DemoDll.dll ایجاد می گردد که برای استفاده آماده است.


    استفاده از یک DLL بصورت دینامیکی
    برای استفاده از یک DLL ‌بصورت دینامیکی، ابتدا نام توابعی را که در فایل DLL شما موجود است بصورت زیر تعریف نمایید:




    unit UMain;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, ExtCtrls;

    type
    TShowdemoFormModal= Function :integer;
    .
    .
    .







    دقت کنید که نام برنامه انتخابی پیش فرض Main و با نام UMain.pas ذخیره گشته است. حال برای لود کردن DLL یادشده، یک دکمه بر روی فرم قرارداده آنرا بصورت زیر کد نویسی کنید:




    var
    hndDLLHandle:THandle;
    ShowdemoFormModal:TShowdemoFormModal;

    procedure TFMain.Button1Click(Sender: TObject);
    begin
    try
    hndDLLHandle:=LoadLibrary('Demodll.dll');

    if hndDLLHandle <> 0 then begin
    @ShowdemoFormModal:=getProcAddress(hndDLLHandle,'S howdemoFormModal');

    if addr(ShowdemoFormModal) <> nil then begin
    ShowdemoFormModal;
    end
    else
    showmessage ('function not exists ...');
    end
    else
    showMessage('Dll Not Found!');
    finally
    freelibrary(hndDLLHandle);
    end;
    end;

  2. #2
    کاربر دائمی
    تاریخ عضویت
    آبان 1384
    محل زندگی
    كاشان
    سن
    35
    پست
    315

    نقل قول: مقاله: استفاده از DLL ها در دلفی

    نقل قول نوشته شده توسط Wish Master مشاهده تاپیک
    استفاده از DLLها در دلفی
    استفاده از یک DLL بصورت دینامیکی
    برای استفاده از یک DLL ‌بصورت دینامیکی، ابتدا نام توابعی را که در فایل DLL شما موجود است بصورت زیر تعریف نمایید:




    unit UMain;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, ExtCtrls;

    type
    TShowdemoFormModal= Function :integer;
    .
    .
    .







    دقت کنید که نام برنامه انتخابی پیش فرض Main و با نام UMain.pas ذخیره گشته است. حال برای لود کردن DLL یادشده، یک دکمه بر روی فرم قرارداده آنرا بصورت زیر کد نویسی کنید:




    var
    hndDLLHandle:THandle;
    ShowdemoFormModal:TShowdemoFormModal;

    procedure TFMain.Button1Click(Sender: TObject);
    begin
    try
    hndDLLHandle:=LoadLibrary('Demodll.dll');

    if hndDLLHandle <> 0 then begin
    @ShowdemoFormModal:=getProcAddress(hndDLLHandle,'S howdemoFormModal');

    if addr(ShowdemoFormModal) <> nil then begin
    ShowdemoFormModal;
    end
    else
    showmessage ('function not exists ...');
    end
    else
    showMessage('Dll Not Found!');
    finally
    freelibrary(hndDLLHandle);
    end;
    end;
    سلام
    یک سئوال: اگر تعداد توابع موجود در dll (که خودم بنویسم)خیلی باشد. یعنی حدود 10 -15 تا باشد؛ باید همه را یکی یکی تعریف کنیم؟
    راهی نیست که بتوان توابع موجود در dll رو بدون اینکه یکی یکی تعریفشون کنیم, استفاده کنیم؟

  3. #3

    نقل قول: مقاله: استفاده از DLL ها در دلفی

    چطور در این dll میشه عکس قرار داد که موقع اجرا بتوان اون عکس رو در یک Image لود کرد؟

  4. #4

    نقل قول: مقاله: استفاده از DLL ها در دلفی

    نقل قول نوشته شده توسط mehdimdp مشاهده تاپیک
    سلام
    یک سئوال: اگر تعداد توابع موجود در dll (که خودم بنویسم)خیلی باشد. یعنی حدود 10 -15 تا باشد؛ باید همه را یکی یکی تعریف کنیم؟
    راهی نیست که بتوان توابع موجود در dll رو بدون اینکه یکی یکی تعریفشون کنیم, استفاده کنیم؟
    چرا یک راه حل ساده این است که یک کلاس یا interface پایه درست کنید که توابع شما در آنها تعریف شده باشد و فقط در dll یک تابع داشته باشید که یک آبجکت را ایجاد کند و به اشاره گر شما اختصاص دهد از این پس در برنامه شما فقط از اون آبجکت استفاده می کنید.

    مثلا :

    unit MyBaseClass;

    Type
    TMyClass = Class
    Public
    Procedure P1;virtual;abstract;
    Procedure P2;virtual;abstract;
    Function F1:integer;virtual;abstract;
    .
    .
    .
    End;

    implementation
    end.


    و در dll خود یک کلاس از همین کلاس مشتق کنید و تابعی با کدی شبیه این کد بسازید:


    Procedure InitObject(Var Obj:TMyClass);
    begin
    Obj:=TMyClass2.Create;
    end;


    حالا در داخل برنامه فقط همین تابع را صدا بزنید و از متد های شئی ساخته شده استفاده کنید.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •