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

نام تاپیک: استفاده از یک DLL ساخته شده با Delphi Prism در Native Delphi

  1. #1

    استفاده از یک DLL ساخته شده با Delphi Prism در Native Delphi

    به نام خدا

    در این مقاله کوتاه من قصد دارم تا در ابتدا شما را با ساخت DLL ها در Delphi Prism آشنا کنم و در قدم بعدی سعی دارم که از آن dll در Native Delphi استفاده کنم.
    توجه داشته باشید برای این کار ابزارهای مختلفی توسط شرکت های مختلف به وجود آمده اند. یکی از این ابزارها RemObjects Hydra و ابزار دیگر Atozed CrossTalk نام دارد. این ابزار ها که در اینجا از آنها نام برده شد به صورت تجاری هستند و بنابرین رایگان هم نیستند!
    ما در این مقاله از ابزارهای فوق استفاده نخواهیم کرد و راه حل سومی را برای ترکیب Managed Code و Native Code ارائه خواهیم داد.

    قدم اول: ساخت dll در Delphi Prism

    1- نرم افزار Delphi Prism را اجرا کنید. توجه داشته باشید که نام دیگر این زبان Oxygen نام دارد.
    2- یک پروژه با نام PrismDll از نوع Class Library ایجاد کنید.
    3- بعد از انجام این کا شما باید کدی شبیه کد زیر را در Code Editor مشاهده کنید:
    namespace PrismDll;

    interface

    type
    Class1 = public class
    private
    protected
    public
    end;

    implementation

    end.

    4- در این مرحله کد خود را به شکل زیر تغییر دهید:
    namespace PrismDll;

    interface

    uses
    System.Windows.Forms,
    System.Runtime.InteropServices;


    type
    Class1 = public static class
    public
    [UnmanagedExport( 'test', CallingConvention.StdCall )]
    method test;
    end;

    implementation

    method Class1.test;
    begin
    MessageBox.Show('Hello From Prism');
    end;

    end.


    چند پرسش و پاسخ در مورد کد بالا:

    الف) چرا در کد بالا از فضای نام System.Runtime.InteropServices استفاده شده است؟
    جواب: موقعی که شما قصد دارید یک متد را به صورت Unmanaged (مدیریت نشده) export کنید و یا از یک dll مدیریت نشده در Delphi Prism استفاده کنید باید این فضای نام را حتماً به کار ببرید.

    ب) UnmanagedExport در کد بالا چرا به کار رفته است؟
    UnmanagedExport یک Attribute است که با استفاده از آن به کامپایلر می گوییم که قصد داریم فلان تابع را به صورت مدیریت نشده Export کنیم. در پارامتر دوم نیز ما روش فراخوانی متد را مشخص می کنیم. اگر می خواهیم که از این dll بتوانیم در محیط های مختلف استفاده کنیم بهتر است که روش فراخوانی را stdcall قرار دهیم.

    ج) در جواب به سوال قبلی گفتید export کرد تابع به صورت مدیریت نشده!!! مگر export شدن یک تابع به صورت مدیریت شده با export کردن تابع به صورت مدیریت نشده با هم تفاوت دارند؟
    جواب، بلی. این دو روش با هم تفاوت دارند. در دات نت به صورت عادی نمی توانید یک تابع تنها را export کنید بلکه باید یک کلاس را export کنید. ولی در win32 روش استاندارد اینگونه است که شما نمی توانید یک کلاس را export کنید و مجبورید که فقط توابع (function) و یا روالها (procedure) را export کنید. البته در اینجا منظور من یک dll استاندارد مربوط به windows است و اصلاً به ActiveX ها و به عبارتی dll های مبتنی بر تکنولوژی COM یا COM+ و... کاری ندارم.

    نکته مهم: همانطور که می بینید کلاس بالا از نوع static می باشد. در واقع این یک نکته کلیدی است که حتماً باید به آن توجه داشته باشید.

    5- در قدم بعدی به پنجره Solution Explorer رفته و در زیر شاخه مربوط به پروژه (در اینجا PrismDll) بر روی Refrences کلیک راست کرده و Add Refrence... را انتخاب کنید.

    6- در پنجره ای کا باز می شود به سربرگ .NET رفته و System.Windows.Forms را انتخاب کرده و بر روی دکمه Add کلیک کنید. با این کار دیگر برای استفاده از MessageBox مشکلی نخواهید داشت.

    7- در قدم بعدی به منوی Project رفته و گزینه Project Properties... را انتخاب کنید.

    8- به سربرگ Build رفته و در قسمت CPU Type گزینه x86 را انتخاب کنید.

    9- سپس به سربرگ Compatibility رفته و گزینه Allow unsafe code را به صورت چک دار درآورید.

    10- سپس از منوی Build گزینه Build Solution را انتخاب کنید.

    استفاده از dll ساخته شده در Native Delphi

    1- دلفی را اجرا کنید. در این جا من از Embarcadero Delphi 2010 استفاده کرده ام ولی شما از هر نسخه دلخواهی می توانید استفاده کنید.

    2- یک پروژه از نوع VCL Forms Application را ایجاد کنید.

    3- پروژه را در مسیر دلخواهی ذخیره کنید.

    4- یک کنترل از نوع TButton را بر روی فرم قرار دهید.

    5- به قسمت کد نویسی مربوط به فرم جاری بروید و در بالای کلمه کلیدی implementation کد زیر را اضافه کنید:
    procedure test; external 'PrismDLL.dll';


    5- در این مرحله به راحتی می توانید از تابع تست در هر کجای برنامه که مایلید استفاده کنید. به عنوان مثال ما از آن در رویداد OnClick کنترل Button1 استفاده کرده ایم:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    test;
    end;


    6- برنامه را کامپایل کنید.

    7- سپس آن dll ای که با Delphi Prism ساخته اید را پیدا کنید و آنرا در کنار فایل اجرایی مربوط به پروژه جاری قرار دهید.

    8- فایل اجرایی را اجرا کرده و بر روی Button 1 کلیک کنید. همانطور که می بینید برنامه ما به درستی کارش را انجام می دهد.


    منبع: تا حد کمی اینجا و بیشترش خودم!!!

    امیدوارم که نهایت استفاده را از این مقاله برده باشد...

    فایل های پروژه ها را نیز در زیر ضمیمه کرده ام که می توانید از آنها استفاده کنید.
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله BORHAN TEC : سه شنبه 08 شهریور 1390 در 02:40 صبح




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

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