واضح آرشیو وب فارسی:سایت ریسک: soltanmahdi24-10-2006, 07:33 AMبا سلام خدمت دوستان. مي خواستم بدونم كه فايل هاي Dll در دلفي به چه كار مي آيد واگر مي شه توضيح مناسبي در ايم مورد بگين. ممنون. Admiral24-10-2006, 10:07 AMفایل های DLL یا Dinamic Link Library شامل یکسری توابع و کدهای زبان ماشین (کامپایل شده) هستند. فرض کن تابعی رو برای محاسبه تاریخ شمسی از قمری نوشتی و نمیخوای کسی الگوریتم کارت رو بفهمه (!!!) اون تابع رو در یک DLL ذخیره میکنی و نحوه استفاده از اون (نام تابع،پارامترها و....) رو معرفی میکنی و اونو به دوستت می فروشی تا بدون اینکه از الگوریتم کارت سر در بیاره بتونه از اون تابع استفاده کنه ! البته این یه مثال بود ! بعضی توابع و فایل مهم که در برنامه لازمه هم روی سیستم به صورت DLL هستند. مثلا برنامه هایی که با دلفی مینویسی از توابع خاصی از سیستم عامل ویندوز استفاده میکنن که در DLL هایی مثال Kernel32.dll و user32.dll و.... قرار دارن. توضیحش مفصله ! soltanmahdi24-10-2006, 11:41 AMبا سلام خدمت دوستان. ادميرال جان اولا لطف كردين كه من رو راهنمايي كردين. حالا اگه امكانش هست بگين كه چطوري مي شه يك فايل دي ال ال ساخت و از آن استفاده كرد؟ يك چيزه ديگه كه من تاپيك هاي ديگه هم زدم. چرا به آنها جواب نمي دهيد؟ ممنون. Admiral24-10-2006, 01:26 PMبا سلام خدمت دوستان. ادميرال جان اولا لطف كردين كه من رو راهنمايي كردين. حالا اگه امكانش هست بگين كه چطوري مي شه يك فايل دي ال ال ساخت و از آن استفاده كرد؟ سلام دوست عزیز دلفی رو باز کنید و از منوی File -> New->Other گزینه Dll wizard رو انتخاب کنید. حالا قبل از Begin فانکشن ها و پروسیجرهای مورد نظر خودتون رو بنویسید. حالا بعد از تعریف توابع و قبل از begin بنویسید Exports و بعدش نام توابع رو با کاما از هم جدا کنید و آخرش هم سمی کالن بزارید.مثلاً: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! حالا پروژه رو Save کنید و یک فایل DLL هم توی پوشه محل ذخیره بوجود میاد ! این روش ساخت DLL بود. اگه روش فراخوانیش رو هم خواستی بگو تا بنویسم. يك چيزه ديگه كه من تاپيك هاي ديگه هم زدم. چرا به آنها جواب نمي دهيد؟ ممنون. دو تا احتمال داره : یا عنوان تاپیک توجه من رو جلب نکرده! یا بلد نبودم ! (این یکی احتمالش بیشتره!) soltanmahdi28-10-2006, 06:33 AMبا سلام خدمت دوستان. ادميرال جان لطف كنيد و اين موضوع را تا جايي كه به درد بخوره ادامه بدهيد ممنون مي شم. ممنون. Admiral28-10-2006, 10:49 AMسلام روش ایجا فایل DLL رو که گفتم حالا می مونه روش فراخوانی یک تابع یا پروسـجـر از داخل فایل DLL : باید در قسمت تعریف توابع برنامه (بعد از implementation) امضای کامل تابع رو بنویسید. که امضای تابع شامل نام + پارامترها + نوع بازگشتی میشه. بعد نوع فراخوانی رو مشخص میکنید که میتونه StdCall یا Register و ... باشه. بعد هم با عبارت External مشخص می کنید روال باید از کدوم DLL لــود بشه. نتیجه یه چیزی شبیه این میشه : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! توی دلفی اگه نوع فراخوانی رو مشخص نکنی به طور پیش فرض Register در نظر گرفته میشه. موفق باشید. soltanmahdi10-11-2006, 08:44 AMبا سلام خدمت دوستان. ادميرال جان اين كارهايي كه گفتي كردم ولي دفعه اول جواب داد و يك فايل Dll درست كرد ولي دفعات بعد چهار فايل ذخيره مي كرد كه هيچ كدام Dll نبود. چند بار هم امتحان كردم .اگه مي شه بگو مشكل كجاست؟ مطلب ديگه اين كه در مورد نوع فراخواني هم بيشتر توضيح بده؟ Admiral10-11-2006, 10:28 AMادميرال جان اين كارهايي كه گفتي كردم ولي دفعه اول جواب داد و يك فايل Dll درست كرد ولي دفعات بعد چهار فايل ذخيره مي كرد كه هيچ كدام Dll نبود. چند بار هم امتحان كردم .اگه مي شه بگو مشكل كجاست؟ بعد از اینکه Save رو زدی یکبار هم Run رو بزن.(کلید F9) مطلب ديگه اين كه در مورد نوع فراخواني هم بيشتر توضيح بده؟ اصلاً نوع فراخوانی رو ننویس خودش پیش فرض Register هست و لازم نیست کار خاصی انجام بدی. soltanmahdi10-11-2006, 04:27 PMبا سلام خدمت دوستان. ادميرال جان دستت درد نكنه از اين كه راهنماييم كردي. ولي وقتي كه مي خواهم كه برنامه را اجرا كنم يك پيغام خطا مي ده به اين مفهوم. Can not Debug project unless a host application is defined. use the run|parameters... debug box. اصلاً نوع فراخوانی رو ننویس خودش پیش فرض Register هست و لازم نیست کار خاصی انجام بدی. كلا براي اطلاعات عمومي گفتم كه نوع فراخواني چي هست و چي كار مي كنه؟ ممنون. Admiral10-11-2006, 05:57 PMادميرال جان دستت درد نكنه از اين كه راهنماييم كردي. ولي وقتي كه مي خواهم كه برنامه را اجرا كنم يك پيغام خطا مي ده به اين مفهوم. Can not Debug project unless a host application is defined. use the run|parameters... debug box طبیعیه، چون این فایل اجرایی نیست که اجرا بشه.فقط واسه این گفتم که فایل DLL رو بسازه. فایل DLL رو ساختش ؟ كلا براي اطلاعات عمومي گفتم كه نوع فراخواني چي هست و چي كار مي كنه؟ باید با اسمبلی آشنایی داشته باشی تا اساسی مفهومش رو متوجه بشی. اینا رو بخون( از Help دلفی) : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! soltanmahdi11-11-2006, 06:25 PMبا سلام خدمت دوستان. ادميرال جان دستت درد نكنه جواب داد. فعلا تا قدم بعدي ممنون و خدا نگهدار. ممنون. Admiral11-11-2006, 09:26 PMمـوفـق بـــــاشی soltanmahdi14-11-2006, 10:14 AMبا سلام خدمت دوستان. ادميرال جان يك مشكل جديد. من يك DLL درست كردم و قصد استفاده از آن را داشتم براي همين كار پشت يك كليد تابع را با نام اصلي خودش فراخواني كردم نه با نامي كه ذخيره كردم. و خروجي آنرا در صفحه نمايش قرار دادم. ولي وقتي برنامه را اجرا مي كنم اين خطا ظاهر مي شود. the application failed to intialize properly (0x000007b). click on ok to terminate the application. من بايد چي كار كنم؟ ممنون Admiral14-11-2006, 11:50 AMادميرال جان يك مشكل جديد. من يك Dll درست كردم و قصد استفاده از آن را داشتم براي همين كار پشت يك كليد تابع را با نام اصلي خودش فراخواني كردم نه با نامي كه ذخيره كردم. و خروجي آنرا در صفحه نمايش قرار دادم. ولي وقتي برنامه را اجرا مي كنم اين خطا ظاهر مي شود. سلام من منظورت از نام اصلی و نام ذخیره شده رو نمی فهمم!!! بیشتر توضیح بده. اگه برات مقدوره کد Dll و برنامه ات رو بزار. soltanmahdi14-11-2006, 01:45 PMبا سلام خدمت دوستان. ببين ادميرال جان وقتي مي خواهي تابع را به صورت DLL در بياوريم يك اسم بايد بديم ديگه. البته بگم كه وقتي مي نويسم Exports test; از كلمه test اشكال مي گيره و براي همين وقتي Ctrl+s مي زنم در همان كه ذخيره مي شود يك اسم بهش مي دم. خوب تا اينجا. مگر تابعي كه نوشتيم يك اسم نداره كه بايد شناسنامه آنرا كامل بنويسم. خوب من هم همان اسم را در پشت كليد مي نويسم ديگه.OK اگه برات مقدوره کد Dll و برنامه ات رو بزار. اين هم لينك دانلود يكي از تابع هايم. دانلود (http://www.4shared.com/file/5895130/85a 2395a/change_date.html) Admiral14-11-2006, 07:01 PMببين ادميرال جان وقتي مي خواهي تابع را به صورت DLL در بياوريم يك اسم بايد بديم ديگه. البته بگم كه وقتي مي نويسم Exports test; از كلمه test اشكال مي گيره و براي همين وقتي Ctrl+s مي زنم در همان كه ذخيره مي شود يك اسم بهش مي دم. خوب تا اينجا. مگر تابعي كه نوشتيم يك اسم نداره كه بايد شناسنامه آنرا كامل بنويسم. خوب من هم همان اسم را در پشت كليد مي نويسم ديگه.OK سلام این یه DLL ساده ست که برای مثال نوشتم : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! این هم تعریف امضای توابع در پروژه ای که میخواد از DLL استفاده کنه. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! البته فایل DLL باید در پوشه ای که پروژه رو Save کردی قرار بدی. موفق باشی soltanmahdi15-11-2006, 12:09 PMبا سلام خدمت دوستان. ادميرال جان با عرض معذرت يک مشکل کوچله ديگه. برنامه قبلي که بهت گفت رو نوشتم يعني همان که پشت يک کليد تابع را فراخواني مي کردم و نتيجه را در يک Edit قرار مي دهم. برنامه اجرا مي شه و مثل قبل خطا نمي ده. مشکل اينجا است که وقتي روي دکمه کليک مي کنم اول خطاي زير را مي ده و بعد از نتيجه در Edit قرار مي گيره. Invalid pointer operation اگر امکامش هست من رو راهنمايي کنيد که خيلي هم لازمش دارم و ديگه داره دير ميشه. کد برنامه هم این است . procedure TForm1.Button1Click(Sender: TObject); var str:string[10]; begin str:=changedate; Edit1.Text:=str; end; ممنون soltanmahdi16-11-2006, 02:57 PMبا سلام خدمت دوستان. ادميرال جان مثل اين كه از كمك كردن به من خسته شدي. آخراشه ديگه يكم ديگه ما رو تحمل كن ديگه رفتني هستيم. ممنون. سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 2184]