آموزش نوشتن پلاگین مالتی مدیا بیلدر (دلفی)

MFiRE

Member
سلام.
اینم یه آموزش در مورد ساخت پلاگین به زبانه دلفی :

منبع : vb-delphi-cpp.blogfa.com
در صورت درخواست بروبچزه فروم ، SDK ای که به زبان Borland C++ Builder بود رو هم آموزش می دم.

برای برنامه نویسی پلاگین از زبان های مختلف برنامه نویسی مانند دلفی یا سی ++ استفاده می کنند.

در اینجا به آموزش پلاگین نویسی برایه مالتی مدیا بیلدر می پردازیم.
توجه داشته باشید که این آموزش برای افرادیست که با دلفی تا حدودی اشنا دارند.


تقریبا ساختار کلیه پلاگین ها در برنامه هایه مختلف مشابه است. مثلاً گرفتن ورودی ، پردازش/اجرای دستورات ، و صدور خروجی !
در مالتی مدیا بیلدر ما ابتدا در صورت لزوم اطلاعاتی را به پلاگین می فرستیم تا پردازش مورد نظرمان بر روی این داده ها انجام شود . مثال کد زیر :
[FONT=courier new,courier,monospace]
[FONT=courier new,courier,monospace]PluginSet("MyPlugIn","myInformation$")[/FONT]
[/FONT]​
در کد بالا اطلاعاتی رو به پلاگینمون فرستادیم.
در پلاگین باید تابعی باشد که این اطلاعات رو دریافت کنه. در واقع هر وقت کد بالا رو اجرا می کنید برنامه ی مالتی مدیا بیلدر یک تابع APi (از پلاگین یا همون فایل DLL)اجرا می کنه که اسم این تابع SetData برای مقادیر integer و SetFile برای مقادیر PChar است.
شکل این تابع در دلفی به صورته زیر است :


[FONT=courier new,courier,monospace]// Called when PluginSet() is called with a string variable[/FONT]
[FONT=courier new,courier,monospace]procedure SetFile (s: PChar); cdecl;[/FONT]
[FONT=courier new,courier,monospace]begin[/FONT]
[FONT=courier new,courier,monospace]g_sScriptString := s;[/FONT]
[FONT=courier new,courier,monospace]end;[/FONT]

[FONT=courier new,courier,monospace]// Called when PluginSet() is called with an integer varaible[/FONT]
[FONT=courier new,courier,monospace]procedure SetData (nData: integer); cdecl;[/FONT]
[FONT=courier new,courier,monospace]begin[/FONT]
[FONT=courier new,courier,monospace]g_nScriptInt := nData;[/FONT]
[FONT=courier new,courier,monospace]end;[/FONT]

در اینجا g_nScriptInt و g_sScriptString متغییرهایی سراسری هستند که اطلاعاته ورودی در آنها ذخیره می شود و برنامه نویسی که در حال نوشتن پلاگین است می تواند از آنها برای کار بر روی اطلاعات ورودی استفاده کند. یعنی اگر خواستید اطلاعاتی که کاربر وارد می کند را به صورت یک پیغام نمایش دهید باید به صورت زیر کد بنویسید :
[FONT=courier new,courier,monospace]
[FONT=courier new,courier,monospace]MessageBox(0,PChar(g_sScriptString),'my Caption',MB_OK);[/FONT]
[/FONT]​

مثاله نحوه ی کارکرد کلی پلاگین :
ما می خوایم پلاگینی بنویسیم که متنه دلخواه ما رو در یک MessageBox نمایش بده !
برای این کار باید اول متن پیغام رو Set کنید که در مالتی مدیا بیلدر از طریقه [FONT=courier new,courier,monospace]PluginSet[/FONT] انجام می شه. بعد هم اجرا کردن تابع مورد نظر شما ، که در قطعه کده زیر اسم تابعی که قراره پیغام رو نشون بده [FONT=courier new,courier,monospace]ShowMessage[/FONT] هست ! تابع مورد نظر رو شما در دلفی کد نویسی می کنید !

[FONT=courier new,courier,monospace]myInformation$ = 'im Message Plugin ! this is test teXt.'[/FONT]
[FONT=courier new,courier,monospace]PluginSet("MessagePlugin","myInformation$")[/FONT]
[FONT=courier new,courier,monospace]PluginRun("[/FONT][FONT=courier new,courier,monospace]MessagePlugin[/FONT][FONT=courier new,courier,monospace]","ShowMessage")[/FONT]​

حالا به سورسه پلاگین می ریم ... به تابع [FONT=courier new,courier,monospace]ShowMessage[/FONT] دقت کنید :

[FONT=courier new,courier,monospace]library Plugin;[/FONT]​

[FONT=courier new,courier,monospace]uses[/FONT]
[FONT=courier new,courier,monospace]SysUtils, Windows, Messages, PluginAPI;[/FONT]

[FONT=courier new,courier,monospace]procedure ShowMessage();[/FONT]
[FONT=courier new,courier,monospace]begin[/FONT]
[FONT=courier new,courier,monospace]MessageBox(0,PChar(g_sScriptString),'My Caption',0);[/FONT]
[FONT=courier new,courier,monospace]end;[/FONT]

[FONT=courier new,courier,monospace]exports[/FONT]
[FONT=courier new,courier,monospace]// MMB plugin API functions[/FONT]
[FONT=courier new,courier,monospace]SetFile,[/FONT]
[FONT=courier new,courier,monospace]GetFile,[/FONT]
[FONT=courier new,courier,monospace]SetData,[/FONT]
[FONT=courier new,courier,monospace]GetData,[/FONT]
[FONT=courier new,courier,monospace]SetPath,[/FONT]
[FONT=courier new,courier,monospace]Copyright,[/FONT]
[FONT=courier new,courier,monospace]GetShortInfo,[/FONT]
[FONT=courier new,courier,monospace]GetInfo,[/FONT]
[FONT=courier new,courier,monospace]GetType,[/FONT]
[FONT=courier new,courier,monospace]SetParentWindow,[/FONT]
[FONT=courier new,courier,monospace]Draw,[/FONT]

[FONT=courier new,courier,monospace]// plugin functions[/FONT]
[FONT=courier new,courier,monospace]ShowMessage;[/FONT]

[FONT=courier new,courier,monospace]begin[/FONT]
[FONT=courier new,courier,monospace]end.[/FONT]

به نظر خیلی ساده اس ! نه !
به کلماته رنگی شده دقت کنید ! اگه یادتون باشه [FONT=courier new,courier,monospace]ShowMessage[/FONT] همون تابعی بود که توسط [FONT=courier new,courier,monospace]PluginRun[/FONT] صدا زده می شد.
در تابع نامبرده فقط یه خط کد نوشته شده که اونم یه تابع Api هست به نام [FONT=courier new,courier,monospace]MessageBox[/FONT] که پیغامی رو با متنه فرستاده شده از برنامه ی مالتی مدیا بیلدر نمایش می ده ! البته می تونستیم خاصیت عنوان رو هم مقدار دهی کنیم که به خاطر ساده بودن برنامه به همین متنه ثابت ( [FONT=courier new,courier,monospace]'My Caption'[/FONT]) بسنده می کنیم.
به صورته مختصر اینم بگم که در بخشه [FONT=courier new,courier,monospace]exports[/FONT] در واقع توابع استخراجی لیست شده اند ! بخشه اول رو که فقط خوده برنامه ی مالتی مدیا بیلدر با هاشون کار می کنه ([FONT=courier new,courier,monospace]SetFile[/FONT] تا [FONT=courier new,courier,monospace]Draw[/FONT]) ! و بخشه دوم که توابعی هست که ما نوشتیم و می خوایم که کاربرانی که از پلاگین ما استفاده کنند به این توابع دسترسی داشته باشند !
در صورته نیاز می تونید یه تابع در پلاگینتون داشته باشید که فقط بقیه توابع داخله پلاگین بتونن ازش استفاده کنن ! یعنی کاربری که داره از پلاگینتون استفاده می کنه به اون تابع دسترسی نداره !
در مورده [FONT=courier new,courier,monospace]g_sScriptString[/FONT] هم که گفتم ، وقتی داده ای رو به پلاگین Set می کنید به متغییره سراسری [FONT=courier new,courier,monospace]g_sScriptString[/FONT] می ره تا در بخش هایه مختلفه پلاگین ازش استفاده شه !
راستی گرفتن خروجی هم توسط تابع [FONT=courier new,courier,monospace]GetFile[/FONT] و [FONT=courier new,courier,monospace]GetData[/FONT] انجام می شه ! از این دو تابع برای صادر کردن خروجی استفاده می شه که شما نیازی به یادگیری یا کلنجار رفتن باهاشونو ندارید ! فقط بدونید که برای صادر کردنه خروجی از نوع String باید به صورته زیر عمل کنید :
[FONT=courier new,courier,monospace]g_sScriptString := 'test Output !' ;[/FONT]و برای صادر کردنه خروجی از نوع Integer باید به صورته زیر عمل کنید :
[FONT=courier new,courier,monospace]g_nScriptInt := 1234 ;[/FONT]در کل اگه تابعی دارید خروجی داره و می خواید خروجی رو به برنامه ی مالتی مدیا بیلدر بفرستید ، به این صورت عمل کنید :
ابتدا عملیات مورد نظرتون رو انجام بدید ، بعد نتیجه رو در یکی از این دو متغییر (بسته به نوع کارکتری یا عددی بودن) ذخیره کنید. به مثاله زیر توجه کنید :

[FONT=courier new,courier,monospace]procedure Calc();[/FONT]
[FONT=courier new,courier,monospace]var[/FONT]
[FONT=courier new,courier,monospace]a ,output : Integer ;[/FONT]
[FONT=courier new,courier,monospace]begin[/FONT]
[FONT=courier new,courier,monospace]a := 5 ;[/FONT]
[FONT=courier new,courier,monospace]output := a + g_nScriptInt ; //here [/FONT][FONT=courier new,courier,monospace]g_nScriptInt is Input[/FONT]
[FONT=courier new,courier,monospace]g_nScriptInt := output ; [/FONT][FONT=courier new,courier,monospace]//here [/FONT][FONT=courier new,courier,monospace]g_nScriptInt is Output[/FONT]
[FONT=courier new,courier,monospace]end;[/FONT]​

در تابع [FONT=courier new,courier,monospace]Calc[/FONT] عددی که از ورودی گرفته شده بود ([FONT=courier new,courier,monospace]g_nScriptInt[/FONT]) در طول تابع به اضافه ی 5 کردیم و به خروجی فرستادیم !
تذکر : پس همونطور که گفته شد در توابعی که خروجی متن یا کارکتر است به جای [FONT=courier new,courier,monospace]g_nScriptInt[/FONT] از [FONT=courier new,courier,monospace]g_sScriptString[/FONT] استفاده کنید.


مقاله ی کاملی نبود ولی سورسی که به زبانه دلفی در همین پست ضمیمه کردم شامل توضیحاتی هست که می تونه خیلی کمکتون کنه !

دانلود آموزش کار با محیط دلفی برای کسایی که دلفی بلد نیستن.
آموزش کد نویسی رو هم بعدا می زارم... آموزشو می تونین از همین تاپیک یا وبلاگم دریافت کنین.

وبلاگ من :

دانلود SDK :
پسورد :
vb-delphi-cpp.blogfa.com
 

پیوست ها

  • Simple_MMB_plugin_source_delphi_[vb-delphi-cpp.blogfa.com].rar
    27.3 کیلوبایت · بازدیدها: 103
  • Borland_Cpp_Builder SDK_[vb-delphi-cpp.blogfa.com].zip
    29.4 کیلوبایت · بازدیدها: 66

splinter cell

Well-Known Member
با سلام و تشکر از مطالب مفیدی که قرار دادین!
دو تا پیشنهاد داشتم:
اول اینکه بقیه مطالب رو همینجا بنویسید تا بصورت یک تاپیک مرجع برای پلاگین نویسی در بیاد که طرفداران زیادی هم داره.
دوم اینکه برای نوشتن اسکریپتها توی فروم از تگ code بجای quote استفاده کنید تا چینش دستورات بهم نریزه و خوندنش راحت تر باشه کما اینکه الان همین اتفاق افتاده.
منتظر ادامه مطلبتون هستیم.موفق باشید
 

naseronline

Well-Known Member
دوست عزيز... جاي اين تاپيك هميشه تو اين انجمن خالي بوده... اگه بكارتون ادامه بدين حتما مفيد خواهد بود... موفق باشي...
 

BEHESHT

Well-Known Member
واقعا مفیده یعنی زدی تو خال عجیب هم دقیق زدی

دو تا سوال جسارتاً با "وی بی" هم میشه پلاگین نوشت؟

کدوم برنامه ابزار قوی تری برای پلاگین نویسی به حساب می یاد؟

تشکر
 

MFiRE

Member
سلام
ادامه مطالبه پلاگین نویسی در همین تاپیک... ! بپرسید ، تا اونجایی که مای دوگوله کار بده ، هستم:lol: !

در مورد پلاگین نویسی با ویژوال بیسیک هم باید عرض کنم که به صورت پیشفرض نمی تونید این کار رو بکنید !
یعنی اون فایل Dll که با ویژوال بیسیک ساخته می شه قابله استفاده در مالتی مدیا بیلدر نیست !

اما یه ابزار برایه ساخت Dll برای ویژوال بیسیک بود که موقع کمپایل فایل Dll رو با ساختاری شبیه به ساختار Dll دلفی تبدیل می کرد فکر می کنم اسمش VB Advance بود

بهترین ابزار (ساده ترین ابزار) برای ساخت پلاگین به علم شما بستگی داره !
اگه دلفی بلد هستین که به راحتی می تونین از طریق این آموزش این کار رو بکنید و اگه سی ++ بلدین که کار یه خرده سخت تره! البته نه اینکه تویه ساختار کلی پلاگین تاثیری داشته باشه (توابعی مثله GetData که تویه دلفی استفاده می شه در سی++ و اسمبلی هم استفاد می شه)! بلکه مسئله ی سختی کد نویسی و باز بودن دست برنامه نویسه !

راستی با اسمبلی هم می شه برای برنامه هایه مختلف پلاگین نوشت.

مزایاش هم اینه که کده شما خیلی کوچیک و سریع خواهد بود ! البته طبیعه که خیلی سخته این کار !
ولی اون SDK که به زبان سی گذاشتم Dll های کوچیکی می سازه. هر چند که به توابع استفاده شده در پلاگین شما بستگی داره.


به قوله یکی از بچه ها چاکرخاتیم...:lol:

 

MFiRE

Member
UPX with MMB Source

اینم یه ابزار برایه فشرده سازی:D Dll های احتمالی ساخته شده توسط شما

این برنامه که اسمش upx هست برای فشرده سازی فایلهای اجرایی و Dll هاست ! با این ابزار می تونین پلاگین هایی که نوشتین رو فشرده کنین.

البته این برنامه به صورت CommandLine هست و خیلی وقت پیش برایه استفاده راحت تر تویه مالتی مدیا بیلدر یه انترفیسه بی ریخت براش طراحی کردم که سورسشو براتون گذاشتم.

پسورد : vb-delphi-cpp.blogfa.com

دانلود :
 

پیوست ها

  • UPX_eXe_Compressor_[vb-delphi-cpp.blogfa.com].rar
    122.8 کیلوبایت · بازدیدها: 82

MFiRE

Member
VB Advance 3.1

اینم اون برنامه که گفتم...
دوستانه ویژوال بیسیک کار می تونن برای مالتی مدیا بیلدر پلاگین بنویسن.

این روزا سرم شلوغه نمی تونم زیاد دنباله مطلب و نرم افزار بگردم ...فکر کنم این برنامه هم از نسخه های قدیمی باشه.
حالا بچه ها یه تست بکنن اگه نشد (که فکر کنم بشه) یه مقاله که یکی از دوستان نوشتن رو می زارم که آموزش می ده که چطور DLL استاندارد بسازید.

و اما نحوه استفاده از این برنامه:
وقتی برنامه رو نصب کنید یه سری نمونه هم باهاش نصب می شه که ساخت Dll هم درش هست. حالاتنها کاری که باید بکنید این هست که توابع زیر رو بر اساس اون نمونه کد دلفی ، به سورس پلاگینی که می خواین با ویژوال بیسیک بسازین، اضافه کنید.
البته یه وقت فکر نکنین که کاره سختیه ! این برنامه فقط یه دکمه به برنامه ویژوال بیسیک اضاف می کنه که مثلا به جایه اینکه یه Dll معمولیه ویژوال بیسیک تولید کنه ! یه Dll ه استاندارد تولید می کنه !
کد:
[SIZE=2][FONT=courier new,courier,monospace]SetFile,[/FONT][/SIZE]
[SIZE=2][FONT=courier new,courier,monospace]GetFile,[/FONT][/SIZE]
[SIZE=2][FONT=courier new,courier,monospace]SetData,[/FONT][/SIZE]
[SIZE=2][FONT=courier new,courier,monospace]GetData,[/FONT][/SIZE]
[SIZE=2][FONT=courier new,courier,monospace]SetPath,[/FONT][/SIZE]
[SIZE=2][FONT=courier new,courier,monospace]Copyright,[/FONT][/SIZE]
[SIZE=2][FONT=courier new,courier,monospace]GetShortInfo,[/FONT][/SIZE]
[SIZE=2][FONT=courier new,courier,monospace]GetInfo,[/FONT][/SIZE]
[SIZE=2][FONT=courier new,courier,monospace]GetType,[/FONT][/SIZE]
[SIZE=2][FONT=courier new,courier,monospace]SetParentWindow,[/FONT][/SIZE]
[SIZE=2][FONT=courier new,courier,monospace]Draw,[/FONT][/SIZE]


راستی با این برنامه می تونین کارایه جالبه دیگه هم انجام بدین ! مثلاً ساخت برنامه های CommandLine با ویژوال بیسیک.


دانلود :

 

پیوست ها

  • vbAdvance3_1.rar
    822.9 کیلوبایت · بازدیدها: 102

BEHESHT

Well-Known Member
سلام این پلاگین نویسی رو خواهشا اگه سر رشته دارید ادامه بدین

واقعا دوستان شما استقبال نکردید!؟

من که داشتم پر در می یاوردم وقتی دیدم همچین مبحثی ایجاد شده:oops:

منتظرم:rose:
 

MFiRE

Member
.how to make standard dll with VB6

سلام
دوستان كه استقبال نكردند ولي به هر حال هر وقت چيزه جديدي نوشتم يا پيدا كردم همينجا مي زارم.
البته الان وقته درسو مدرسه اس ، نمي شه بيش از اين انتظار داشت.

امروز داشتم در مورده چيزه ديگه اي جستجو مي كردم كه به موضوعه : نوشتن پلاگينه(Dll) استاندارد با ويژوال بيسيك 6 برخوردم. گفتم براي شما هم بزارم.

خودم به دليل وقته واقعا كمي كه دارم امتحانش نكردم ! ولي تويه اون انجمني كه اينو پيدا كردم پرسيده بودن كه مي شه با VB براي PEiD پلاگين نوشت؟ يه نفر جواب داد كه بعععله مي شه !
اتفاقا ساخته پلاگين براي PEiD اسونتر از بيلدر هست ! پس نگران نباشيد براي مالتي مديا بيلدر هم مي شه ساخت.


آدرس منبع :


اينم نمونه كد :
 

پیوست ها

  • howto_make_standard_dll.zip
    10.4 کیلوبایت · بازدیدها: 43

rezapf

Member
سلام
خیلی کار عالی و معرکه ایه:rose:
البته من زیاد سررشته ندارم ولی همیشه دنبال یه بهانه ای برای START بودم
من ای همچین کمی vb بلدم ( که شاید بدرد بخوره ) ، در مورد دلفی یه کم توضیح بدید ، کار باهاش چطوره ، چون اینطور که گفتید برای پلاگین نویسی باید توش سررشته داشت ، ضمناً برای پلاگین نوشتن برای برنامه های مشابه مثل فلش و ادوب دایرکتوری و... هم باید دلفی بلد بود یا ... ؟
البته ببخشید از اینهمه پر چونگی ، چون احساس میکنم کار نسبتاً پیچیده و زمانبریه و ارزش کمی تحقیق رو داره .
موفق باشید .
یا علی .
 

MFiRE

Member
سلام
همونطور كه گفتم براي پلاگين نويسي مي تونيد از نرم افزار هاي مختلفي از جمله دلفي، ويژوال بيسيك، سي ++ و حتي اسمبلي هم استفاده كنيد.

در چند پست قبل در مورد پلاگين نويسي با ويژوال بيسيك توضيح دادم و براي نوشتن پلاگين با ويژوال بيسيك نياز هست تا از روش هايي كه گفتم استفاده كنيد. نمونه سورس كد ويژوال بيسيك رو هم در رابطه با نوشتن پلاگين هم گذاشتم.البته نه پلاگين نويسي براي مالتي مديا بيلدر. بلكه يه نمونه براي اينكه متوجه بشيد كه چطور بايد اين كار رو بكنيد.

البته اگر مي خوايد پلاگين بنويسيد بهتره به جايه اينكه وقتتون رو با ويژوال بيسيك تلف كنيد از همين الان يادگيري دلفي رو شروع كنيد. شايد اول كمي مشكل به نظر برسه ولي خواهيد ديد كه اينطور نيست !

به نظره من با اومدن نسخه ي "ويژوال بيسيك دات نت" ، ديگه دنياي ويژوال بيسيك تموم شده و به ويژوال بيسيك فكر كردن يه اشتباه محض هست! البته خطابه من به اون دسته افرادي است كه از ويژوال بيسيك براي ساخت ابزار ويندوز و نرم افزار هاي كاربردي استفاده مي كنند!. نه اون دسته افرادي كه با بانك هاي اطلاعاتي كار مي كنند‌!
.
.
براي يادگيري دلفي چند تا فيلم آموزشي تويه وبلاگم گذاشتم كه مي تونين دانلود كنيد.
با دلفي براي هر برنامه اي مي توان پلاگين نوشت.
 
آخرین ویرایش:

BEHESHT

Well-Known Member
سلام جناب MFiRE

ببخشید وی بی مخالف های زیادی رو داره چون افراد مبتدی رو وارد دنیای برنامه نویسی کرده و دات نت هم که دیگه نور علی نور ماشاالله کم نمی یاره مبتدی ها رو خب با استفاد ه از توابع آماد اش به هدفشون می رسونه

اما از دلفی یه کم برامون توضیح می دی آیا برگرفته از پاسکال برلند دلفی رو چطئور ارزه کرده خصوصیات این زبان چیه و...


ممنون
 

MFiRE

Member
اينجا جاش نيست !

در مورد وي بي هم بايد بگم كه مخالف زياد نداره ، اين نظره شخصيه من هست !
در مورد توابع آماده هم بايد بگم كه دلفي در اين مورد هم از وي بي قويتر هست ! و البته استفاده از توابع Api هم در دلفي از وي بي بهتر هست !
اگه مي خوايد دلفي ياد بگيريد گفتم كه مي تونيد از فيلم هاي آموزشي وبلاگ و مقالاتي كه در وب يافت مي شه استفاده كنيد . به زودي مقالاتي در مورد دلفي رو در وبلاگم قرار مي دم.

با عرض معذرت دوسته عزيز لطفا ديگه در مورد موضوعات متفرقه سوال نپرسيد ! مگه مي خواي تاپيكو بفرستي اون دنيا:D

با تشكر
 

BEHESHT

Well-Known Member
مثل این که تعطیل داره خاکم می خوره پست اونایی که بلدن دست رو دست نذارند خواهشاً
 

silvercover

کاربر متخصص
مثل این که تعطیل داره خاکم می خوره پست اونایی که بلدن دست رو دست نذارند خواهشاً

دوست من صمیمانه بگم که افراد صرفا با پیگیری این دست مطالب پلاگین نویس نخواهند شد. شما باید مهارت خودتون رو در زبان برنامه نویسی مورد نظر ارتقا بدید. باور بفرمایید که بعد از اون پلاگین نویسی امری بسیار ساده خواهد شد. چون در حقیقت تنها فرقش با برنامه های مستقل اجرایی این هست که باید با رابط هایی با بیلدر ارتباط برقرار کرد. پس با خودتون صادق باشید.

اگر هم که احساس می کنید در زبان مربوطه توان کافی رو دارین من پوزش میخام.
 

BEHESHT

Well-Known Member
یک دنیا ممنون آقا حامد عزیز ولی من خودمو کشتم یکی به نگفت چطور میشه تو vb پس از نوشتن برنامه اونو با mmb هماهنگ کرد دنبال روزنه ای هستم تا بتونم یه پیشرفتی کنم

خیلی خوشحالم که صادقانه حقیقت رو بیان می کنید.
 

جدیدترین ارسال ها

بالا