۳۱-شهریور-۱۳۸۵, ۱۳:۵۳:۱۵
۳۱-شهریور-۱۳۸۵, ۱۸:۰۵:۴۵
خوب طریقش اینجوریه که
اول که ویژوال بیسیک رو باز کردید از منوی فایل گزینه New Project رو انتخاب میکنید
حالا یک لیست جلوتون هست از انواع پروژه ها که شما ActiveX Dll رو انتخاب میکنید
خوب با این کار نداریم من تمام این کارا رو قبلا کردم
توی این مثالی که من گذاشتم دوتا پروژه هست که یکیش پروژه prjDll هست و دیگری یه برنامه prjExe هست که برای فراخوانی Dll طراحی شده
شما بدون دست کاری نامی پروژه prjDll رو کمپایل کنید حالا سراغ پروژه prjExe بروید و آن را باز کنید
قسمت References در منوی Project را باز کنید گزینه ای به نام (کنترول ریاضی) میبینید که این همان Dll ماست که به برنامه اضافه شده که این کار رو من خودم توسط دکمه Browse انجام دادم
حالا وقتی به پنجره کد برمیگردید طریقه تعریف این Dll رو میبینید و احتمالا در نظر شما طریقه فراخوانی این Dll با فراخوانی بقیه Dll ها فرق میکنه
اگر با API ها اشنا باشید تفاوت فراخوانی توابع رو در این Dll که ما خودمون درست کردیم و Dll های دیگه که ما توابع اونها رو فراخونی میکنیم رو به راحتی میبینید
در این خط
شما باید DataType خود که همان Ps هست را با استفاده از دستور Set در پروژه Classify کنید و تا بصورت یک Object در فرم تعریف بشه
دلیل اینکه از دستور Set استفاده کردیم این هست که DataType ما از نوع Complex یا پیچیده هست
و در این صورت است که موظف به انجام چنین کاری میشیم
این نوع فراخوانی Dll به طور معمول برای Dll هایی جواب میدهد که در VB طراحی شده باشد و همچنین این نوع فراخوانی نیز مختص VB هست
راستی اینو نگفتم که استفاده از Dll اصلا چه فایدهای داره
خوب فایدش در جاهایی مفید واقع میشه که ما نیاز یه استفاده از چندین حلقه Global داریم یا در حال خواندن حافظه با حجم بالا هستیم یا نیاز به محاسبات ریاضی با حجم بسیار بالا داریم و دلیل اینکه با استفاده از Dll سرعت برنامه کمی بالاتر میره اینه که ما درواقع از یک Instance دیگه در برناممون کمک گرفتیم که در این صورت به حجم بالاتری از اطلاعات میتونیم پاسخ بدیم
اینم سورس برنامه
خیلی ساده و مفید نوشتم که مشکلی پیش نیاد
موفق باشی
اول که ویژوال بیسیک رو باز کردید از منوی فایل گزینه 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 زیاد نباشه
Spider جان بزار برات راحتتر توضیح بدم هر CPU چندتا مؤلفه داره که یکی از اونا Clock هست
مثلا اگه یه Cpu دارای Clock=1000 یعنی میتونه که در یک ثانیه 1000 پالس منطقی رو تولید کنه
خوب اینا مقدمه بود با توجه به این CPU یک سیر چرخشی رو طی میکنه که طی اون به درخواست هایی که ازش میشه پاسخ میده حالا شما وقتی که از دو Instance استفاده میکنی Cpu برای شما دوتا CallTime رو رزرو میکنه که در طی اون مسیرش به هر دو درخواست شما پاسخ میده بدین صورت شما میتونی در هر دوره دو بار درخواست داشته باشی و به موازاتش هم دوبار پاسخ
که باعث افزایش سرعت میشه البته این افزایش زمانی محسوس هست که CPU Usage زیاد نباشه
۳۱-شهریور-۱۳۸۵, ۲۳:۱۴:۵۴
چطور به دو تا درخواست جواب میده! من که کد dll رو تو یه حلقه گذاشتم گیر کرد!
۳۱-شهریور-۱۳۸۵, ۲۳:۳۶:۳۹
spiderman نوشته است:من که کد dll رو تو یه حلقه گذاشتم گیر کرد!
کد Dll رو تو یه حلقه گذاشتی
مطمئنی منظورت همینه یکمی بیشتر توضیح بده ببینم چکار میخوای بکنی
۳۱-شهریور-۱۳۸۵, ۲۳:۴۶:۵۰
عجله ای شد !
منظورم این بود که کدی که تو dll بود یه حلقه بود. یعنی با فرا خوانی تابع تو dll یه حلقه اجرا می شد. من با این توضیحات انتظار داشتم برنامه به کاره خودش ادامه بده!
این اصطلاحات هم یکم برا من سنگینه! رعایت سن و حال ما رو بکن!
منظورم این بود که کدی که تو dll بود یه حلقه بود. یعنی با فرا خوانی تابع تو dll یه حلقه اجرا می شد. من با این توضیحات انتظار داشتم برنامه به کاره خودش ادامه بده!
این اصطلاحات هم یکم برا من سنگینه! رعایت سن و حال ما رو بکن!
۰۱-مهر-۱۳۸۵, ۰۰:۰۷:۲۹
آخه من گفتم سرعت بالا میره ولی دیگه نگفتم که مثل آینه برات کار میکنه
آخه بستگی به حلقت هم داره
در این مواقع به دلیل اینکه مثلا این کد رو که اجرا کنی
تا حلقه ای که درون Dll شماست تموم نشده برنامه به خط بعدی نمیره و برا این کار باید از Event یا همون رویداد استفاده کنی که برنامه خودت رو منتظر پاسخ نزاری و روند عادی برنامه طی بشه و هر موقع حلقه تموم شد از طریق رویداد باخبر بشی
حالا اون حلقت چکار میکنه که باعث قفل برنامت شده
راستی از DoEvent هم استفاده کن
اینم برا اونایی که از روش فراخونی قبلی بدشون میاد
با این روش هم میتونید Dll رو فراخونی کنید
این روش اکثرا در صفحات و زبانهای PHP و Asp و VBS و ... استفاده میشه و یه جورایی باحالتر هم هست چون خودمون مستقیم به Dll وصل میشیم و اونو فراخونی میکنیم
آخه بستگی به حلقت هم داره
در این مواقع به دلیل اینکه مثلا این کد رو که اجرا کنی
کد:
MyNumber = ProcessAll(123, 1233)
تا حلقه ای که درون Dll شماست تموم نشده برنامه به خط بعدی نمیره و برا این کار باید از Event یا همون رویداد استفاده کنی که برنامه خودت رو منتظر پاسخ نزاری و روند عادی برنامه طی بشه و هر موقع حلقه تموم شد از طریق رویداد باخبر بشی
حالا اون حلقت چکار میکنه که باعث قفل برنامت شده
راستی از DoEvent هم استفاده کن
اینم برا اونایی که از روش فراخونی قبلی بدشون میاد
کد:
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 هست یا....
رو چشم امروز یا فردا میزارم رو سایت چون میدونی که دانشگاه و درس و... شروع شدن البته اولش الافیه ولی من اینو میزارم
فقط میمونه یه چیز
منظورت کدوم نوع ActiveX هست چون تاپیک راجع ActiveX Dll بود حالا شما منظورت ActiveX Control هست یا....