ورود

View Full Version : تبدیل dll به Component



lukaskain
دوشنبه 11 آبان 1388, 19:49 عصر
سلام خدمت همه دوستان
می خوام بدونم در Delphi7 چگونه می توانم یک کامپوننت را به dll تبدیل کنم.
با تشکر از همه اساتید

vcldeveloper
دوشنبه 11 آبان 1388, 23:30 عصر
یک گزینه آماده وجود نداره که شما روی آن کلیک کنید، و کامپوننت تبدیل به DLL بشه! بهتر هست دقیقا توضیح بدید که چه کاری میخواید انجام بدید، و چه چیزی باعث شد که به این نتیجه برسید که باید کامپوننت را تبدیل به DLL کنید.

lukaskain
سه شنبه 12 آبان 1388, 13:13 عصر
آقای کشاورز عزیز با عزض ادب و احترام
من یک کامپوننت دارم و می خواهم آن را dll win32 کنم تا بتونم ازش تو برنامه های دیگر هم استفاده کنم
با سپاس

vcldeveloper
سه شنبه 12 آبان 1388, 16:22 عصر
یک کامپوننت دلفی یک کلاس هست؛ DLL استاندارد ویندوز چیزی جز توابع را نمیتونه export کنه؛ در نتیجه یک DLL استاندارد ویندوز به صورت عادی نمیتونه یک کلاس را در اختیار برنامه های استفاده کننده ازش قرار بده.

اگر هم به فرض می تونست، کلاس دلفی در برنامه های نوشته شده در سایر زبان ها قابل استفاده نبود، چون ساختار حافظه اشیاء و کلاس های یک زبان با زبان دیگه تفاوت داره.

اگر کامپوننت مربوطه Visual نیست، یک راه این هست که در داخل DLL یک نمونه شی از آن بسازید، و به ازاء هر خصوصیت و متد آن، یک تابع در داخل DLL تعریف کنید، به این ترتیب، مجموعه ایی از توابع دارید که در داخل خودشان از آن کامپوننت خاص استفاده می کنند، و نتیجه انجام هر عمل را به برنامه فراخوان DLL برمی گردانند.

اگر کامپوننت مربوطه Visual هست، باید بجای تبدیل به DLL، یک ActiveX برای آن تولید کنید، تا سایر زبان ها مثل Visual Basic بتوانند از آن مثل یک کامپوننت در داخل برنامه های خودشان استفاده کنند.

lukaskain
سه شنبه 12 آبان 1388, 22:03 عصر
جناب کشاورز
ما می توانیم هر کدی را به یک کامپوننت تبدیل کنیم
در واقع یک یا چند تابع می نویسیم با فورمت کامپوننت
می توانیم اصلا کامپوننت را نسازیم و تابع را مستقیم در برنامه تعریف نماییم
dll مجموعه ای از توابع می باشند که هر تابع با متدی معین و پارامتر(های) معلوم می تواند فراخوانی شود
هر تابعی می تواند در قالب dll, component, function تعریف شود و مورد استفاده قرار گیرد
بله کامپوننت یک کلاس برای دلفی می باشد اما توابع آن در هر زبانی با Syntax خاص آن قابل استفاده می باشند
بنده می توانم عین کامپوننتم را مجدد در Dll Wizard بنویسم اما به خاطر حجم زیاد کد دنبال یک راه ساده تر می باشم

vcldeveloper
سه شنبه 12 آبان 1388, 23:55 عصر
بنده می توانم عین کامپوننتم را مجدد در Dll Wizard بنویسم اما به خاطر حجم زیاد کد دنبال یک راه ساده تر می باشم
اگر پست قبل را به دقت تا انتها مطالعه می کردید، جواب شما داده شده بود؛ توضیح دادم که DLLهای استاندارد ویندوز قادر به export کردن یک Type مثل یک کلاس نیستند. بخاطر همین محدودیت هم دلفی برای Packageهای خود از نوع خاصی از DLL استفاده میکنه که قابلیت export کلاس و شی را داشته باشه. البته این نوع خاص (فایل های BPL) فقط در دلفی و C++ Builder قابل استفاده هستند.

اگر شما بخواید یک سری کلاس را بصورت DLL در ویندوز در اختیار سایر برنامه ها و زبان های برنامه نویسی قرار بدید، باید از COM استفاده کنید. اگر کلاس مربوطه یک کنترل Visual برنامه نویسی هست، باید آن را به ActiveX که زیر مجموعه ایی از COM محسوب میشه، تبدیل کنید. اساسا COM برای جوابگویی به همین نیاز ارائه شد.

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


بنده می توانم عین کامپوننتم را مجدد در Dll Wizard بنویسم اما به خاطر حجم زیاد کد دنبال یک راه ساده تر می باشم
راه های پیش رویتان همین دو موردی هست که توضیح دادم، یا باید از COM استفاده کنید، یا کل کلاس را به صورت Procedural بنویسید. البته اینها به شرطی هست که هدف تان استفاده از اون کد در زبان های برنامه نویسی مختلف باشه. اگر هدف استفاده از یک کلاس در سایر برنامه های نوشته شده با دلفی یا C++ Builder هست، راه حل استفاده از Packageهای دلفی (فایل های BPL) هست.