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

نام تاپیک: ایجاد فایلهای BPL و استفاده از آنها

  1. #1

    ایجاد فایلهای BPL و استفاده از آنها

    به نام خدا ...
    هر برنامه نويس دلفي مطمئنا در طول فعاليت برنامه نويسيش با فايلهاي BPL برخورد داشته ، در اين مقاله سعي ميکنيم کمي در مورد اين فايلها توضيح بديم و نحوه ي ساخت و استفاده از اونها رو هم بررسي کنيم ...
    خوب ، مطمئنا همتون با فايلهاي DLL آشنايي داريد ، به زبان ساده فايلهاي DLL يا Dynamic Link Library ، به شما اين امکان رو مي دند که درون اونها تواقع ، متد ها ، اشياء و ... رو ذخيره کنيد و در مواقع لزوم در برنامه ي خودتون اونها رو Load کنيد ...
    در اينجا قصد داريم با نوع ديگري از فايلهاي DLL آشنا بشيم !
    فايلهاي BPL يا Borland Package Library ، فايلهاي کتابخانه اي هستند که توسط شرکت بورلند ( سابق ) ايجاد شدند ، اين نوع فايلها که مخصوص IDE دلفي و برنامه هاي نوشته شده با زبان دلفي هستند ، مانند DLL ها به شما اين امکان رو ميدن که درون اونها توابع ، متدها ، اشياء و ... ! رو ذخيره کرده و در مواقع لزوم Load کنيد ...

    براي درک بهتر مراحل ساخت و استفاده از يک نمونه فايل BPL رو بررسي ميکنيم ، قصد داريم يک Form رو درون يک فايل BPL قرار داده و در برنامه اون رو نمايش بديم ...
    براي شروع کار بعد از ورود به محيط دلفي ، کليه ي پروژه هاي در حال ساخت ! رو ببنديد ( با رفتن به مسير File > Close All ) ، در ادامه يک Package جديد ايجاد کنيد ( از مسير File > New > Package ) ، بعد از ساخت Package پروژه رو با ذخیره کنید ...
    Package ساخته شده دو قسمت به نامهای Contains و Requires داره ، قسمت Contains شامل دستورات و اشیاء ای هست که شما در قالب یک Unit یا Form درون Package خودتون قرار میدید ، قسمت Requires مربوط به میشه به فایلهای مورد نیاز برای Unit هایی که در قسمت Contains قرار داده اید ...
    قصد داریم یک Form رو درون Package قرار بدیم ، برای اضافه کردن یک Form به Package روی قسمت Contains راست کلیک کرده و به مسیر " Add New > Form " برید :
    بعد از ساخت فرم اشیاء مورد نظرتون رو درونش قرار بدید و فرم دلخواهتون رو بسازید ، در اینجا قصد داریم فرمی بسازیم که مقداری رو از کاربر دریافت کنه و به برنامه برگشت بده ! ، پس یک Label و یک Edit به همراه یک BitBtn بر روی فرم قرار میدیم :
    به این قسمت دقت کنید :
    ما در Package خودمون یک تابع تعریف میکنیم که دو ورودی به عنوان Caption فرم و Caption مربوط به Label دریافت میکنه و در بدنه ی تابع Caption ها رو به Form و Label اختصاص میده و در ادامه فرم رو نمایش میده و در آخر هم مقدار وارد شده توسط کاربر رو به عنوان خروجی برگشت میده ، تقریبا چیزی شبیه به یک InputBox ، پس تابع مورد نظرمون رو به صورت زیر تعریف میکنیم :

    function ShowForm(FCaption, LCaption : String) : String;
    var
    F : TMyForm;
    begin
    F := TMyForm.Create(nil);
    try
    F.Caption := FCaption;
    F.MyLabel.Caption := LCaption;
    F.ShowModal;
    finally
    Result := F.MyEdit.Text;
    F.Free;
    end;
    end;

    در OnClick مربوط به دکمه ی بر روی فرم هم باید فرم رو ببندیم :
    procedure TMyForm.PostBtnClick(Sender: TObject);
    begin
    if MyEdit.Text <> '' then
    Close
    else
    ShowMessage('Please Enter Value !');
    end;

    برای تنوع ! می تونیم قبل از بستن فرم خالی نبودن Edit رو بررسی کنیم ...

    خوب ، بعد از ساخت فرم باید پروژه رو کامپایل کنید ، در هنگام کامپایل پروژه با پنجره ی زیر مواجه خواهید شد :
    در ابتدای مقاله ذکر شد که قسمت Requires برای هر Package مربوط به فایلهایی هست که Unit ها سایر اجزایی که در قسمت Contains قرار می دید برای اجرا به اونها نیاز دارند ، وقتی یک Form رو به Package اضافه میکنید باید کتابخانه ی VCL یا Visual Component Library هم به عنوان کتابخانه ی مورد نیاز به پروژه اضافه بشه تا همراه پروژه کامپایل بشه ، VCL مربوط به اشیاء Visual ای هست که در برنامه استفاده شدند ...
    در قسمت Requires فایل دیگری با نام RTL.dcp قرار داره که به صورت پیشفرض به پروژه اضافه میشه ، این کتابخانه که همون Run-Time Library هست ، برای همه پروژه های ایجاد شده با دلفی نیاز هست و معمولا دلفی اون رو به صورت پیشفرض به برنامه اضافه میکنه ...
    به هر حال ، با دادن پاسخ مثبت به پنجره ی باز شده در هنگام کامپایل فایل vcl.dcp به Package شما اضافه میشه و همراه اون کامپایل میشه ...
    بعد از کامپایل پروژه به مسیری که پروژه رو در اون ذخیره کردید برید ، در این مسیر فایل Package با پسوند DPK وجود داره و فایلی با پسوند BPL دیده نمیشه !! ، خروجی BPL مربوط به Package ها در مسیری ذخیره میشه که در قسمت " Tools > Options > Delphi Options > Library - Win32 " و در بخش Package Output Directory مشخص شده ، پس به مسیر گفته شده برید و فایل BPL مربوط به پروژتون رو کپی کنید و در کنار برنامه ای که باید از اون استفاده کنه قرار بدید !
    می تونید مسیر فایلهای BPL رو به دلخواه خودتون تغییر بدید ...

    خوب ، اما نحوه ی استفاده از فایل BPL ...
    برای استفاده از توابع درون یک فایل BPL باید ، ابتدا Package رو در برنامه Load کنیم ، بعد یک تابع رو به تابع درون BPL ارتباط بدیم و در ادامه تابع ارتباط داده شده رو فراخوانی کنیم و در نهایت Package لود شده رو UnLoad کنیم ، یک پروژه ی جدید بسازید ، یک Edit و یک BitBtn بر روی فرم قرار بدید ، در رویداد OnClick مربوط به BitBtn دستورات زیر رو بنویسید :
    var
    ShowF : function(FCaption, LCaption : String) : String;
    MyPkg : HMODULE;
    FC, LC : String;
    begin
    MyPkg := LoadPackage(ExtractFilePath(Application.ExeName)+' MyPackage.bpl');
    FC := 'Enter Value ... ';
    LC := 'Value : ';
    if MyPkg <> 0 then
    begin
    try
    @ShowF := GetProcAddress(MyPkg, 'ShowForm');
    if Assigned(ShowF) then
    Edit1.Text := ShowF(FC, LC)
    else
    ShowMessage('Function not found !');
    finally
    UnloadPackage(MyPkg);
    end;
    end;
    end;


    به یک نکته ی مهم توجه کنید :
    ما در هنگام ساخت Package دو کتابخانه ی VCL و RTL رو به عنوان کتابخانه های مورد نیاز قرار دادیم ، برای اینکه برنامه ی ما بتونه از این فایل BPL بدون مشکل استفاده کنه ، باید برنامه رو همراه با کتابخانه های VCL و RTL به عنوان Run-Time Library عرضه کنیم ...
    برای این منظور به قسمت Project > Options > Packages برید قسمت Build With Run Time Packages رو فعال کنید و در کادر زیر این گزینه کتابخانه ی VCL و RTL رو وارد کنید :
    vcl;rtl


    توجه کنید که باید این فایلها همراه برنامه ی شما باشند تا برنامه ی شما بدون مشکل اجرا بشه ! ، متاسفانه این یکی از محدودیتهای استفاده از Package های BPL هست ...

    توجه کنید که اگر در درون Package خودتون از اشیاء دلفی و نوع های مخصوص دلفی مثل String استفاده نکرده باشید ، می تونید با Package خودتون مثل یک فایل DLL رفتار کنید و همچنین نیازی به وارد کردن vcl و rtl به قسمت Requires مربوط به Package نیست تا نیازی به وجود این فایلها در کنار برنامتون باشه که در اینصورت می تونید برنامه ی استفاده کننده از فایل BPL رو هم بدون Package های Run-Time کامپایل و عرضه کنید ( توجه کنید برای این منظور تیک قسمت Build With Run-Time Packages رو بردارید )

    توجه : مسیرها و گزینه هایی که در بالا ذکر شد برای دلفی 2010 بود ، اگر دلفی 7 استفاده می کنید به موارد زیر توجه کنید :

    • برای ایجاد Package جدید به مسیر File > New > Other برید و در صفحه ی New گزینه ی Package رو انتخاب کنید ...
    • مسیر ذخیره ی فایلهای BPL در مسیر Tools > Environment Options و در صفحه ی Library قرار داره ...


    امیدوارم مفید بوده باشه ، موفق باشید ...
    آخرین ویرایش به وسیله Mahmood_M : چهارشنبه 26 آبان 1389 در 23:04 عصر

  2. #2

    نقل قول: ایجاد فایلهای BPL و استفاده از آنها

    مقاله خیلی خوبی بود.
    یکی از محدودیت های برنامه هایی که قسمتی از آنها با تکنیک گفته شده در بالا ایجاد می شوند این است که Base Code Version مربوط به فایل exe و فایلهای bpl باید یکی باشد. به عبارتی اگر شما فایل exe را با دلفی 2010 ایجاد کرده باشد ، فایلهای bpl را هم باید حتماً با دلفی 2010 باید کامپایل کنید و اگر غیر از این رفتار کنید برنامه با خطا مواجه میشود. همچنین دومین ضعف این روش این است که توسعه برنامه را تاحدی دشوار می کند. برای رفع این مشکل توصیه می کنم که از RemObjects Hydra استفاده کنید که محدودیت های گفته شده را رفع می کند و همچنین با استفاده از آن شما به راحتی می توانید برنامه های دات نتی را با برنامه های ساخته شده با native delphi به شکل بسیار خوبی ترکیب کنید. در شکل زیر شما تصویری را می بینید که قسمتی از فرم با WPF (که مربوط به دات نت است) و قسمتی دیگر با Delphi Win32 ایجاد شده است.
    برای کسب اطلاعات بیشتر هم می توانید به آدرس زیر مراجعه کنید:
    http://www.remobjects.com/hydra/
    عکس های ضمیمه عکس های ضمیمه

برچسب های این تاپیک

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

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