آموزش ساخت dll در ویژوال بیسیک برای بیلدر

ansoft

Active Member
سلام
اول اینو بم که جستجو کردم مطلب مورد نظرمو پیدا نکردم

من از اساتید میخوام به من کمک کنند
میخوام برای برنامه Multimedia biulder پلاگین بسازم اون هم با visual basic 6
اصلا میشه ، اگر امکانش هست قدم اول برای ساخت library یا همون dll رو توضیح بدین و باید از کجا یک پروژه جدید بسازم
 

the_king

مدیرکل انجمن
سلام
اول اینو بم که جستجو کردم مطلب مورد نظرمو پیدا نکردم

من از اساتید میخوام به من کمک کنند
میخوام برای برنامه Multimedia biulder پلاگین بسازم اون هم با visual basic 6
اصلا میشه ، اگر امکانش هست قدم اول برای ساخت library یا همون dll رو توضیح بدین و باید از کجا یک پروژه جدید بسازم

به این تاپیک رجوع کنید :

طریقه پلاگین نویسی با ویژوال بیسیک
 

saalek110

Well-Known Member
این تاپیک در مورد ساخت dll با ویژوال بیسیک است.
در تاپیکی که در پست قبل دوستمان لینک داده گفته با دلفی یا ویژوال سی dll بساز.
من نمی دانم ساختن dll با این دو زبان به کار شما می آید یا نه. ولی در پست بعد مقاله ای در مورد ساخت dll در دلفی و ویژوال سی می زنم.
 
آخرین ویرایش:

saalek110

Well-Known Member
از :
http://www.eeuok.com/articles/Delphi/177060.aspx
---------------------------------------------------------------
مقاله :

Dll را دریابید!

Dll مخفف Dynamic Link Library است که استادان سخن از آن با نام کتابخانه پیوندی پویا یاد کرده اند..Dll حقیقتا مشابه یک کتابخانه است بدین صورت که شما کتابهایتان را در کتابخانه قرار می دهید تا بعدا به سهولت آنها را به کار بگیرید یا آنها را در اختیار دیگران قرار دهید Dll هم بر همین اساس در سیستم عامل ویندوز پیاده سازی شده است .با این تفاوت که به جای کتاب توابع خود را در آن ذخیره می کنید .Dll حاوی توابعی است که به منظور خاصی نوشته اید و می خواهید بار ها از آن استفاده کنید و حتی برنامه نویسان دیگر هم می توانند از توابع نوشته شده ی شما استفاده کنند بدون اینکه مالکیت شما بر روی آن توابع نقض شود دقیقا مشابه کتابخانه که هر کسی بنا بر نیاز خود کتابی را از کتابخانه به امانت می گیرد و پس از استفاده، آن را بر می گرداند . تفاوت دیگری که Dll با کتابخانه دارد این است که در آن واحد از یک تابع چند برنامه کاربردی می توانند استفاده کنند این هم به خاطر معماری اشتراک حافظه در سیستم عامل است و محدودیتی در استفاده از تعداد برنامه های تقاضا کننده وجود ندارد مگر اینکه حافظه سیستم جوابگو نباشد. در این مورد فرض کنید که در کتابخانه ای حقیقی به ازای هر درخواست کننده کتاب ک نسخه از کتاب بلافاصله از روی نسخه اصلی چاپ شود و به متقاضی داده شود و سپس نسخه اصلی هم در کتابخانه باقی بماند.

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

Dll ها به خودی خود نمی توانند اجرا شوند و بایستی توسط برنامه های اجرائی (کاربردی ) فراخوانی شوند.
بنابراین Dll روشی کارا برای :
1. استفاده مجدد از کد
2. همکاری بین افراد
3. و توزیع توابع نوشته شده توسط برنامه نویسان می باشد.
4. علاوه بر اینها بسیاری از توابع API دستورات مربوط به خود را فقط از طریق Dll انجام می دهند ( برای مبحث Wide Hook)
بنابراین هر برنامه نویس تحت سیستم عامل ویندوز لازم است تا نحوه نوشتن Dll را بداند . در این مقاله نحوه نوشتن Dll را توسط محیط برنامه نویسی Delphi 7 شرکت بورلند که یکی از بهترین و قوی ترین کامپایلر های موجود است را شرح می دهیم و در مقاله ای دیگر نحوه فرا خوانی Dll را که نوشته ایم توسط یک برنامه ساده نشان می دهیم . بدیهی است این مقاله فقط یک استارت و جرقه می باشد و تسلط کامل بر مبحث به عهده خواننده است.

اما نوشتن Dll:

محیط برنامه نویسی Delphi 7 را اجرا کنید و از منوی File گزینه NEW و سپس گزینه Other را انتخاب کنید .
سپس در پنجره ظاهر شده گزینه Dll Wizard را انتخاب کنید و دکمه Open را کلیک کنید.


a1.png


پنجره Code Editor ظاهر می شود .
به اولین خط در این پنجره نگاه کنید . قبلا هنگام نوشتن برنامه های EXE اولین عبارت Program بود اما حالا اولین کلمه library است . Library به کامپایلر می گوید که کد، مربوط به یک پروژه Dll خواهد بود.


بعد از Library یک سری توضیحات با رنگ آبی نوشته شده است که یک یاد آوری برای برنامه نویس می باشد و هیچ ارزش اجرایی ندارد . اگر زحمتی بایتان ندارد خواندن آن برای یک بار هیچ ضرر مالی و جانی به همراه ندارد و بعدا می توانید آن را حذف کنید تا برنامه تان شلوغ نشود.
بعد از آن عبارت USES قرار گرفته است . همچنانکه برنامه نویسان محترم مستحضرید!!! این عبارت یونیت های به کار گرفته شده در برنامه را تعیین می کند . به صورت پیش فرض چند یونیت فرا خوانی شده اند اما بسته به کاری که Dll قرار است انجام دهد می توانید یونیت ها را اضافه و کم کنید .برای مثال در صورتی که یکی از توابع Dll قرار است که با رجیستری کار کند در این صورت به یونیت Registry احتیاج پیدا خواهید کرد و باید آن را در لیست Uses اضافه کنید.
بعد از آن یک راهنمای کامپایلر با رنگ سبز و سپس Begin ,End پروژه قرار دارد .
در Dll هر کاری که می خواهید انجام شود به صورت تابع بنویسید توابع را قبل از begin,End تعریف کنید.همانطور که قبلا گفتم Dll قدرت این را ندارد که به تنهایی اجرا شود و باید توسط یک برنامه کاربردی یا Dll دیگر فرا خوانی شود.
خوب حالا کد نویسی را شروع می کنیم . می خواهیم تابعی بنویسیم که با استفاده از یک message Box کلمه hello را نشان دهد. یادآوری می کنم که هدف ما آشنا کردن شما با ساختار یک Dll است .

a2.png


ون می خواهیم از Message Box استفاده کنیم و تابع ShopwMessge در یونیت dialogs است بنابراین این یونیت را به لیست Uses اضافه می کنیم.

قبل از Begin تابع را بدین صورت تعریف می کنیم:

کد:
Function showhello:integer;
Begin
ShowMessage('Hello!');
Result:= 0 ;
End;

ار دیگری که باید انجام دهیم این است که توابعی را که تعریف کرده ایم برای برنامه های اجرایی قابل دسترس سازیم تا برنامه ها و Dll های دیگر بتوانند از این توابع استفاده کنند . برای این کار از دستورs Export استفاده می کنیم بعد از این دستور لیست توابعی خواهد آمد که می خواهیم از خارج از Dll مورد استفاده قرار گیرند در صورتی که نعداد تابع ها بیشتر از یکی باشد بوسیله کاما آنها را از هم جدا می کنیم.


کد نویسی تمام شد حال یک Dll ساخته ایم . تنها کاری که باقی مانده است ذخیره Dll در مکان دلخواه و سپس کامپایل کردن آن است . از منو ی File گزینه Save As را انتخاب کنید و پس از انتخاب مکان دلخواه برای ذخیره ی پروژه ، در قسمت نام فایل برای پروژه نام مناسبی انتخاب کنید ما دراینجا eeuok را انتخاب کرده ایم .سپس دکمه ی Save را بزنید در پنجره کد عبارت Library eeuok به جای عبارت قبلی نشان داده می شود. برای کامپایل Dll از منوی Project گزینه Compile All project را انتخاب کنید.

a3.png


سالک : کل کد را من می آورم:
کد:
library Project2;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  SysUtils,
  [COLOR="Red"]dialogs[/COLOR],
  Classes;

{$R *.res}

 Function showhello:integer;
Begin
ShowMessage('Hello!');
Result:= 0 ;
End;
[COLOR="Red"]exports showhello[/COLOR];
begin
end.
حال یک Dll آماده دارید.
 
آخرین ویرایش:

saalek110

Well-Known Member
قسمت دوم : استفاده از dll
از :
http://www.eeuok.com/articles/Delphi/179784.aspx
---------------------------------------------------------------

Dll را دریابید! قسمت دوم

در مقاله قبلی یاد گرفتیم که چگونه یک dll بنویسیم .dll ای با یک تابع بانام Showhello نوشتیم که یک messageBox با کلمه hello را نشان داد. در این مقاله نحوه استفاده از این dll را در برنامه یاد می گیریم .
استفاده از توابع نوشته شده در dll ، به وسیله برنامه خود را فرا خوانی dll می گویند . همانند تابع که دارای دو step تعریف و فرا خوانی است dll هم دو جنبه تعریف و فراخوانی دارد تعریف dll مقاله قبلی بود و مبحث این مقاله استفاده از تابع قبلی است که همان جنبه فرا خوانی است .

به دوصورت می توان یک dll را از برنامه فرا خوانی کرد :
1 – فرا خوانی به صورت استاتیک
2 - فرا خوانی به صورت پویا یادینامیک

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

ابتدا فرا خوانی استاتیک را بررسی می کنیم .
Delphi 7 را اجرا کنید و پروژه جدیدتان را با نام دلخواه در مکان دلخواه ذخیره کنید.سپس یک کپی از dll ای را که قبلا ساختید را در پوشه ای که پروژه تان را ذخیره کردید قرار دهید. البته می توانید dll را در پوشه ی ویندوز یا در پوشه ی system32 نیز قرار دهید این یک مسیر پیش فرض برای سیستم عامل است تا فایل ها ی اجرایی را در آنجا جستجو کند.
در پنجره کد ادیتور بعد از uses و قبل از type هدر تابعی را که در dll تعریف کرده اید .

برای مثال ما خط زیر را قرار دهید:

کد:
function showhello:integer ; stdcall; external 'eeuok.dll';

به دو کلمه stdcall و external در تعریف هدر توجه کنید ، stdcall نوع انتقال آرگومان ها را به تابع معین می کند . چند نوع روش انتقال وجود دارد stdcall پارامتر ها را از راست به چپ به تابع ارسال می کند بدون اینکه از رجیستر ها استفاده کند . به دلیل اینکه برنامه اجرایی و تابع فرا خوانی شونده جدا از هم می باشند نحوه ارسال پارامتر ها مهم

است .
External به کامپایلر می گوید که تابع باید از یک dll در حافظه قرار گیرد.در صورتی که dll را در مکانهایی که قبلا گفتم قرار نداده اید ذکر مسیر کامل dll بعد از external ضروری است .


خوب ، کار تمام شد در هر جایی از برنامه که می خواهید می توانید نام تابع را بنویسید و تابع را اجرا کنید .

ما این کار را در رویداد formcreate انجام دادیم:

کد:
procedure TForm1.FormCreate(Sender: TObject);
begin
showhello;
end;

سالک : روش دوم را در خود سایت بخوانید. روش اول چون خیلی ساده بود و باعث ایجاد تنوع میشد را نقل کردم. ما تابحال 3 نوع برنامه ایجاد کردیم. کنسولی - ویندوزی - و dll ئی . با مقایسه این 3 نوع برنامه و مشاهده تفاوها و شباهتها حالا بیشتر می دانید که هر کلمه معنای چیست. مثل کلمهlibrary (در پروژه dll ئی ) با program در برنامه ویندوزی در خط اول کد پروژه .
همچنین مثل usesکه در کنسولی چنین است:
کد:
uses
  SysUtils;
و در نوع dll ئی داریم:
کد:
uses
  SysUtils,
  dialogs,
  Classes;
البته dialogs را خودمان اضافه کردیم چون قرار بود dll ما مسیج باکس را نمایش دهد که جلوه ای دیالوگی بود.
و در پروژه ای که میانگین 10 عدد را محاسبه می کرد uses چنین بود:
کد:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 

saalek110

Well-Known Member
منبع:
http://www.programmers-corner.com/tutorial/4

ساخت یک dll با ویژوال سی 6 برای استفاده در ویژوال بیسیک 6

ابتدا از منوی فایل گزینه new را بزنید و بعد در پنجره باز شده در تب Projects گزینه Win32 Dynamic-Link Library را بزنید. بعد نامی به پروژه بدهید و مکانش را در هارد مشخص کنید.

در پنجره بعدی گزینه An empty DLL project را انتخاب کنید.

---------------------
بعد بایستی فایلی به پروژه بیافزایید.
از منوی فایل باز new را بزنید و بعد در تب Files گزینه C++ Source File را انتخاب و نام SampleCode بدهید.
---------
بعد مراحل بالا را باز برای افزودن فایل دیگری بروید ولی این بار C/C++ Header File را انتخاب کنید. نام فایل را همنام فایل قبلی بدهید.

------
برای اضافه کردن فایل بعدی مراحل قبل را تکرار کنید ولی این بار گزینه text file را انتخاب کنید و نام exports.def را به آن بدهید.

a2.gif


اضافه کردن کدها:
به فایل SampleCode.h کد زیر را اضافه کنید:
کد:
#include <windows.h>   
int nFirstNum;
int nSecondNum;
به فایل SampleCode.cpp کد زیر را اضافه کنید:
کد:
#include "SampleCode.h"   
   
//This Function will accept a String And two integers   
//It will display the String in a message box, And Return    
//the sum of the two integers   
//This Is intended As a sample of passing info between   
//c++ And visual basic   
   
// Function definition   
int __stdcall MyFunction(char *szString, int nFirstNum, int nSecondNum)   
{   
    //Display a messagebox With the String (just wanted To show you   
    //how To pass a String)   
    MessageBox(NULL,szString,"Sample Code", NULL);   
   
    //Return the sum of the two integers. Notice a VB Long Is an Integer   
    //in c++.    
    return nFirstNum + nSecondNum;   
}
به فایل exports.def کد زیر را اضافه کنید:
کد:
EXPORTS   
    MyFunction    @1
کد:
Additional export functions would be @2, @3, ...
--------------------
Build the dll
دکمه F7 را بزنید یا از منوها :
Build > Build SampleProj.dll
بعد این کار در پنجره بیلد باید داشته باشید:
0 errors and 0 warnings
یعنی بی خطا اجرا شود.
حالا در جایی که پروژه را ذخیره کرده اید در پوشه debug فایل dll خود را دارید.
ایجاد نسخه نهایی یا release
از منوی Build گزینه Set Active Configurations را بزنید. پنجره ای باز می شود. Release را انتخاب کنید و ok کنید.
دوباره پروژه را Build کنید.
این بار در مکان ذخیره پروژه یک پوشه جدید به نام Release ایجاد می شود که باز حاوی فایل dll شماست. که قابل استفاده برای ویژوال بیسیک است.
 

saalek110

Well-Known Member
استفاده در ویژوال بیسیک 6 (مربوط به پست قبلی):
یک پروژه وی بی استاندارد باز کنید.
کد زیر را به پنجره کد بیافزایید:
کد:
Option Explicit   
   
'Declare the c++ dll. In the real world you will probably do this   
'in a module. Note the path to your dll might be different than mine.   
'Also note that the values are being passed ByVal 
Private Declare Function MyFunction Lib _   
    "c:\pub\sampleproj\debug\SampleProj.dll" (ByVal szString As String, _   
    ByVal nFirstNum As Long, ByVal nSecondNum As Long) As Long   
       
Private Sub Form_Load()   
    Dim lngResults As Long   
    'call the function. It should display a messagebox with the string   
    'which will originate from the dll, and then another messagebox   
    'from vb with the total of our two longs 
    lngResults = MyFunction("This is a test.", 5, 4)   
    MsgBox "The total is " & CStr(lngResults)   
    Unload Me   
End Sub
آدرس فایل dll (قسمت قرمز) را مطابق مسیر فایل و نام فایل بکنید. (نمی دانم نویسنده اشتباه کرده یا من اشتباه می کنم . مگه نگفت نسخه ریلیز به کار وی بی میاد چرا نسخه دیباگ را استفاده کرده. خودتان تست کنید و حواستان باشد. من که سرسری تست کردم هر دو نسخه در وی بی جواب می داد.)
پروژه وی بی را اجرا کنید.
 

جدیدترین ارسال ها

بالا