PDA

مشاهده نسخه کامل : نحوه ی ساخت DLL در ویژوال بیسیک دات نت



ravegoat
18-07-08, 10:03
هر DLL یا Class Library از یک یا چند کلاس تشکیل شده است. هر کلاس هم می تواند شامل یک یا چندین تابع ویا متغیر باشد.

تابع یک دستور است که عملی را برای ما انجام می دهد. تابع ها ممکن است دارای ورودی باشند که به آن ها آرگومان (پارامتر) می گویند و تابع ها معمولا مقداری را بر می گردانند. به عبارت دیگر یک تابع اطلاعاتی را دریافت می کند، بر روی آن ها اعمالی انجام داده و در آخر اطلاعاتی را در اختیار ما قرار می دهد.

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


یکی از استفاده های DLL در برنامه نویسی عدم نیاز به کد نویسی طولانی است. فرض کنیم ما قصد نوشتن برنامه ای را داریم که در چند رویداد مختلف آن نیاز به چرخاندن 180 درجه ای یک تصویر است. می توان کد چرخاندن عکس را در چندین رویداد این برنامه تکرار کنیم ولی این کار باعث کند شدن برنامه می شود. اما اگر کد چرخاندن عکس را به عنوان یک تابع در یک DLL وارد کنیم، می توانیم در رویداد های مورد نظر به جای نوشتن کل کد، فقط یک خط مربوط به تابع ایجاد شده را قرار دهیم. چون مقدار کد کاهش یافته برنامه بازده بهتری خواهد داشت. علاوه بر آن می توان از Class Library در سایر برنامه ها هم استفاده کنیم. مثلا می توانیم کد های پر کاربرد خود در یک DLL قرار داده و از آن ها در هر جایی که دوست داشته باشیم استفاده کنیم.

ravegoat
18-07-08, 10:22
برای ایجاد یک DLL ابتدا ویژوال استادیو را اجرا می کینم. یک پروژه ی جدید ایجاد می کنیم (New Porject را کلیک می کنیم). زبان ویژوال بیسیک و سپس در سمت راست Class Library را بر می گزینیم.
پنجره ی کدی به صورت زیر ایجاد می شود:


Public Class Class1

End Class


تابع ها و متغیر های خود را باید بین این دو خط تعریف کنیم. لازم به ذکر است در خط اول Class1 اسم کلاس است که می توانیم آن را تغییر دهیم.

ما دو نوع تابع متداول داریم: گونه ی که خود می توانند مقداری را در خود ذخیره کنند و خود به عنوان یک متغیر باشند و گونه ای دیگر که این گونه نیستند.

ساختار گونه ی اول:


Shared Function [Function Name](Parameter) As [Dimension]

End Function


ساختار گونه ی دوم:


Shared Sub [Sub Name](Parameter)

End Sub


افزودن آرگومان به تابع در هر دو گونه یکسان است:


Shared Sub [Sub Name](ByVal [ParameterName1] As [Dimension], ByVal [ParameterName2] As [Dimension], ...)

End Sub



یک Function ساده بدون ورودی:






Shared Function UpTime() As Integer

'نام تابع UpTime است که می تواند مقادیری از نوع Integer (عدد صحیح) را در خود ذخیره کند. چون داخل () چیزی وجود ندارد پس تابع بدون ورودی است.


UpTime = My.Computer.Clock.TickCount \ 1000

'My.Computer.Clock.TickCount مقدار زمان روشن بودن رایانه بر حسب میلی ثانیه است.
'این مقدار را تقسیم (تقسیم صحیح) بر 1000 می کنیم تا مقدار بر حسب ثانیه بدست آید. سپس این مقدار را در خود تابع UpTime ذخیره می کنیم. یعنی {مقدار} = UpTime .


End Function

'پایان تابع


یک Sub ساده بدون ورودی:





Shared Sub MsgUpTime

'نام تابع MsgUpTime است. چون داخل () چیزی وجود ندارد پس تابع بدون ورودی است.


MsgBox(My.Computer.Clock.TickCount \ 1000)

'در این قسمت از تابع MsgBox() استفاده کردیم. یعنی این تابع خود مقدار روشن بودن رایانه را در یک Message Box نشان می دهد.


End Sub

'پایان تابع


یک Function ساده با ورودی:





Shared Function Average(ByVal Number1 As Double, ByVal Number2 As Double)
As Double

'نام تابع ما Average است. این تابع می تواند مقادیری از نوع Double (عدد اعشاری) را در خود ذخیره کند. Average دارای دو ورودی است که با علامت ویرگول از هم جدا شده اند. نام ورودی اول Number1 و دومی Number2 است که هر دوی آن ها از نوع Single (عدد اعشاری) می باشند.
' توجه داشته باشیم دقت اعشار Double دو برابر Single است.


Average = (Number1 + Number2) / 2

'مقدار دو ورودی را با هم جمع می کنیم و عدد حاصل را بر 2 تقسیم می کنیم. سپس مقدار به دست آمده را در تابع Average ذخیره می کنیم.


End Function

'پایان تابع



متغیر در DLL:
در DLL ما می توانیم دو نوع متغیر تعریف کنیم:
گونه ی اول که متغیر های ساده اند و گونه ی دوم که متغیر های اشتراکی نام دارند.

همه ی ما متغیر های ساده را می شناسیم. همان متغیر هایی که همواره در برنامه های خود از آن ها استفاده می کنیم.

ساختار:


Dim [Dimension Name] As [Dimension]


مثال:


Dim mytxt As String


متغیر های اشتراکی هم دقیقا مانند متغیر های نوع اول اند اما یک تفاوت عمده بین این دو وجود دارد. متغیر های ساده در یک کلاس فقط مربوط به همان کلاس است و فقط اجزای آن کلاس می توانند از این متغییر استفاده کنند. اما متغییر های اشتراکی علاوه بر این که قابل استفاده برای کلاس خود هستند، مقدار های خود را به اشتراک می گذارند.

ساختار:


Public Shared [Dimension Name] As [Dimension]


مثال:


Public Shared mytext As String



یک Sub ساده با ورودی (که خروجی خود را در یک متغیر اشتراکی قرار می دهد):




Public Shared Number As Double

'متغیر اشتراکی به نام Number را از نوع Double تعریف می کنیم.


Shared Sub dimAverage(ByVal Number1 As Single, ByVal Number2 As Single)

'یک تابع با نام dimAverage تعریف می کنیم. dimAverage دارای دو ورودی است که با علامت ویرگول از هم جدا شده اند. نام ورودی اول Number1 و دومی Number2 است که هر دوی آن ها از نوع Single می باشند.


Number = (Number1 + Number2) / 2

'مقدار دو ورودی را با هم جمع می کنیم و عدد حاصل را بر 2 تقسیم می کنیم. سپس مقدار به دست آمده را در متغیر Number ذخیره می کنیم.


End Sub

'پایان تابع



پس از این که DLL مورد نظر خود را نوشتیم آن را کامپایل می کنیم. برای این کار به منوی Build رفته و گزینه ی اول را انتخاب می کنیم. اگر همه چیز درست باشد DLL با موفقیت ساخته می شود.

ravegoat
18-07-08, 10:25
1-اگر یک DLL را با VS 2008 (ویژوال استادیو) کامپایل کنیم نمی توانیم از آن DLL در VS 2005 استفاده کنیم. اما اگر یک DLL را با VS 2005 کامپایل کنیم می توانیم از آن در VS 2008 استفاده کنیم.

2-توابع نیز مانند متغیر ها دارای نوع ساده و اشتراکی می باشند که تعریف ذکر شده در مورد انواع متغیر ها در مورد توابع نیز صدق می کند. ما می توانیم تابع ای ایجاد کنیم که فقط اجزای کلاس آن تابع بتوانند از آن استفاده کنند. به طور کلی اجزایی که در اول آن ها Shared وجود دارد اشتراکی هستند.
کد های زیر یک تابع غیر اشتراکی را نشان می دهند:


Public Sub Notshared()
MsgBox("I am not Shared!")
End Sub


3-در محیط کد نویسی DLL ها برخی از مراجع (Reference) در دسترس نیستند؛ مانند: System.Drawing . یعنی اگر ما بخواهیم در DLL یک متغیر از نوع Bitmap تعریف کنیم، چون Bitmap عضو مرجع System.Drawing است، این کار برای ما امکان پذیر نیست. پس ابتدا باید این مرجع را وارد DLL کنیم و سپس به تعریف متغیر مورد نظر خود بپردازیم. برای این کار در محیط VS، به منوی Project رفته و گزینه ی Add Reference... را انتخاب می کنیم. سپس در پنجره ی جدید باز شده در زبانه ی .NET مراجع مورد نظر خود را انتخاب می کنیم و در آخر OK را کلیک می کنیم.

4-برای اضافه کردن یک کلاس به Class Library، در محیط VS به منوی Project رفته و گزینه ی Add Class را انتخاب می کنیم. سپس در پنجره باز شده در فیلد پایین نام کلاس را تایپ می کنیم و در آخر OK را می زنیم.

ravegoat
18-07-08, 10:29
در محیط برنامه نویسی نرم افزار مورد نظر به منوی Project رفته و Add Reference... را انتخاب می کنیم . در پنجره ی باز شده وارد زبانه ی Browse می شویم و به مسیری که DLL ما در آن قرار دارد می رویم. DLL را انتخاب می کنیم و در آخر OK را می زنیم.

سپس برای دسترسی به اجزای Class Library از الگوی زیر استفاده می کنیم:


[DLL Name].[Class Name]


مثال:


MyDLL.SimpleClass


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


در پایان کد های توضیح داده در این مقاله را به صورت یک Class Library در آوردم و یک برنامه نوشتم که در آن از این DLL استفاده شده است. این DLL و Application با زبان VB.NET 2005 نوشته شده اند و همراه با سورس می باشند که آن ها را در لینک زیر قرار داده ام:

1164


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

با سپاس
آرمین:1. (38):

MoBiN.R
18-07-08, 19:24
عالی بود آرمین جان .. فقط عزیز فایل های پروژه های مثال که اینجا میزاری رو هم بزار .. در ضمن اگه ممکنه فایل هاتو توی همین سایت آپلود کن تا مشکلی برای دانلود پیش نیاد

ravegoat
19-07-08, 08:10
با سلام!

مبین جان:
1-منظورت از پروژه ی مثال چیه؟

2-متاسفانه یکم با آپلود تو اینجا مشکل دارم. در هنگام بارگذاری خطا می ده.

با سپاس
آرمین:cool:

MoBiN.R
19-07-08, 09:49
یعنی هم مثالی که انجام میدی ، پروژه اون مثال رو هم بنویس آپلود کن بزار اینجا .. یعنی فایل پروژه اون مثال هارو

ravegoat
23-07-08, 21:23
یعنی هم مثالی که انجام میدی ، پروژه اون مثال رو هم بنویس آپلود کن بزار اینجا .. یعنی فایل پروژه اون مثال هارو

با سلام!

مبین جان! کاری که گفته بودی رو انجام دادم و فایل ها را تو انجمن بالاگذاری کردم!

با سپاس
آرمین:1. (26):

MoBiN.R
24-07-08, 10:10
کار بسیار خوبی کردی ... ادامه بده بحثتو عزیز