ايران ويج

نسخه‌ی کامل: آموزش ساخت dll و کار با اون
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2 3
یکی ساخت dll و کار با اونو توضیح بده . لطفا !
با تشکر Whistle
خوب طریقش اینجوریه که

اول که ویژوال بیسیک رو باز کردید از منوی فایل گزینه New Project رو انتخاب میکنید

حالا یک لیست جلوتون هست از انواع پروژه ها که شما ActiveX Dll رو انتخاب میکنید
خوب با این کار نداریم من تمام این کارا رو قبلا کردم


توی این مثالی که من گذاشتم دوتا پروژه هست که یکیش پروژه prjDll هست و دیگری یه برنامه prjExe هست که برای فراخوانی Dll طراحی شده
شما بدون دست کاری نامی پروژه prjDll رو کمپایل کنید حالا سراغ پروژه prjExe بروید و آن را باز کنید

قسمت References در منوی Project را باز کنید گزینه ای به نام (کنترول ریاضی) میبینید که این همان Dll ماست که به برنامه اضافه شده که این کار رو من خودم توسط دکمه Browse انجام دادم

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

در این خط
کد:
Set Ps = New Mohasebeh

شما باید DataType خود که همان Ps هست را با استفاده از دستور Set در پروژه Classify کنید و تا بصورت یک Object در فرم تعریف بشه

دلیل اینکه از دستور Set استفاده کردیم این هست که DataType ما از نوع Complex یا پیچیده هست
و در این صورت است که موظف به انجام چنین کاری میشیم


این نوع فراخوانی Dll به طور معمول برای Dll هایی جواب میدهد که در VB طراحی شده باشد و همچنین این نوع فراخوانی نیز مختص VB هست

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

اینم سورس برنامه

خیلی ساده و مفید نوشتم که مشکلی پیش نیاد
موفق باشی
از پاسخت خیلی ممنونم.واقعا باحالی!
نقل قول: دلیل اینکه از دستور Set استفاده کردیم این هست که DataType ما از نوع Complex یا پیچیده هست
منظورت اینه که با این کد فرق داره؟
کد:
Dim ps as new Mohasebe

نقل قول: خوب فایدش در جاهایی مفید واقع میشه که ما نیاز یه استفاده از چندین حلقه Global داریم یا در حال خواندن حافظه با حجم بالا هستیم یا نیاز به محاسبات ریاضی با حجم بسیار بالا داریم و دلیل اینکه با استفاده از Dll سرعت برنامه کمی بالاتر میره اینه که ما درواقع از یک Instance دیگه در برناممون کمک گرفتیم که در این صورت به حجم بالاتری از اطلاعات میتونیم پاسخ بدیم
یکم بیشتر در مورد این توضیح بده. اگه واقعا سرعت محاسلات ریاضی رو زیاد می کنه خیلی بدرد من میخوره! (مخصوصا تو حلقه)
نه این کد شما هم دقیقا اون کار رو میکنه اینجا در این پروژه از کد شما میشه استفاده کرد ولی در همه جا از عهده تعریف این نوع دادهها بر نمیاد اما روش کلی همونی بود که در پروژه تعریف شده

Spider جان بزار برات راحتتر توضیح بدم هر CPU چندتا مؤلفه داره که یکی از اونا Clock هست
مثلا اگه یه Cpu دارای Clock=1000 یعنی میتونه که در یک ثانیه 1000 پالس منطقی رو تولید کنه

خوب اینا مقدمه بود با توجه به این CPU یک سیر چرخشی رو طی میکنه که طی اون به درخواست هایی که ازش میشه پاسخ میده حالا شما وقتی که از دو Instance استفاده میکنی Cpu برای شما دوتا CallTime رو رزرو میکنه که در طی اون مسیرش به هر دو درخواست شما پاسخ میده بدین صورت شما میتونی در هر دوره دو بار درخواست داشته باشی و به موازاتش هم دوبار پاسخ
که باعث افزایش سرعت میشه البته این افزایش زمانی محسوس هست که CPU Usage زیاد نباشه

چطور به دو تا درخواست جواب میده! من که کد dll رو تو یه حلقه گذاشتم گیر کرد!
spiderman نوشته است:من که کد dll رو تو یه حلقه گذاشتم گیر کرد!
QuestionAmaze

کد Dll رو تو یه حلقه گذاشتی

مطمئنی منظورت همینه یکمی بیشتر توضیح بده ببینم چکار میخوای بکنی
عجله ای شد !

منظورم این بود که کدی که تو dll بود یه حلقه بود. یعنی با فرا خوانی تابع تو dll یه حلقه اجرا می شد. من با این توضیحات انتظار داشتم برنامه به کاره خودش ادامه بده!
این اصطلاحات هم یکم برا من سنگینه! Biggrin رعایت سن و حال ما رو بکن!
آخه من گفتم سرعت بالا میره ولی دیگه نگفتم که مثل آینه برات کار میکنه

آخه بستگی به حلقت هم داره

در این مواقع به دلیل اینکه مثلا این کد رو که اجرا کنی

کد:
MyNumber = ProcessAll(123, 1233)

تا حلقه ای که درون Dll شماست تموم نشده برنامه به خط بعدی نمیره و برا این کار باید از Event یا همون رویداد استفاده کنی که برنامه خودت رو منتظر پاسخ نزاری و روند عادی برنامه طی بشه و هر موقع حلقه تموم شد از طریق رویداد باخبر بشی

حالا اون حلقت چکار میکنه که باعث قفل برنامت شده
راستی از DoEvent هم استفاده کن



اینم برا اونایی که از روش فراخونی قبلی بدشون میادAngry
کد:
Dim Ps
Set Ps = CreateObject("Prjdll.Mohasebeh")
Me.Caption = Ps.Jam_Kon(12, 12)
Set Ps = Nothing

با این روش هم میتونید Dll رو فراخونی کنید
این روش اکثرا در صفحات و زبانهای PHP و Asp و VBS و ... استفاده میشه و یه جورایی باحالتر هم هست چون خودمون مستقیم به Dll وصل میشیم و اونو فراخونی میکنیم


آقا پدارم حالا كه اينو توضيح داديد يه زحمتي براي منم بكشيد و درست كردن اكتيواكس رو هم توضيح بديد.البته اگه وقت داشته باشيد
سلام عزیز

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

صفحه‌ها: 1 2 3