امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
تعریف کلاس در dll و استفاده از آن در exe (حیاتی)(حیاتی) لطفا کمک کنید
نویسنده پیام
black-scorpion آفلاین
تازه وارد

ارسال‌ها: 16
موضوع‌ها: 5
تاریخ عضویت: خرداد ۱۳۸۶

تشکرها : 0
( 2 تشکر در 1 ارسال )
ارسال: #1
تعریف کلاس در dll و استفاده از آن در exe (حیاتی)(حیاتی) لطفا کمک کنید
چطور میشه یک کلاس رو در یک فایل dll توسط دلفی نوشت
و بعد از آن در یک برنامه به زبان دلفی استفاده کرد.
مثل استفاده از یکسری dll ها که در قسمت type library
دلفی ازشون استفاده میشه.

این پروژه برام خیلی مهمه چون میخام از کلاسم که در دلفی
می نویسم در دلفی ، سی و یا زبانهای دیگه استفاده


دوستان خواهش میکنم کمک کنید. ممنون
۱۸-آبان-۱۳۸۶, ۱۷:۲۹:۳۶
ارسال‌ها
پاسخ
black-scorpion آفلاین
تازه وارد

ارسال‌ها: 16
موضوع‌ها: 5
تاریخ عضویت: خرداد ۱۳۸۶

تشکرها : 0
( 2 تشکر در 1 ارسال )
ارسال: #2
RE: تعریف کلاس در dll و استفاده از آن در exe (حیاتی)(حیاتی) لطفا کمک کنید
یعنی هیچ کس نمی دونه چطوری میشه یک کلاسو در دی ال ال تعریف کرد؟

یعنی یک کلاس در دی ال ال تعریف بشه و بعد در برتانه ازش استفاده بشه

من توی سی شارپ می تونم ولی با دلفی نمی تونم

لطفا کمک کنید.
۲۲-آبان-۱۳۸۶, ۲۲:۴۲:۱۵
ارسال‌ها
پاسخ
Mamad2003 آفلاین
کاربر با تجربه
****

ارسال‌ها: 1,150
موضوع‌ها: 18
تاریخ عضویت: آذر ۱۳۸۲

تشکرها : 9
( 388 تشکر در 232 ارسال )
ارسال: #3
RE: تعریف کلاس در dll و استفاده از آن در exe (حیاتی)(حیاتی) لطفا کمک کنید
http://delphi.about.com/od/windowsshella...basics.htm

گويند بهشت و حور و کوثر باشد  ..  جوي می و شير و شهد و شکر باشد
پر کن قدح باده و بر دستم نه      ..   نقدي ز هزار نسيه خوشتر باشد  
۲۳-آبان-۱۳۸۶, ۰۴:۵۲:۱۳
ارسال‌ها
پاسخ
black-scorpion آفلاین
تازه وارد

ارسال‌ها: 16
موضوع‌ها: 5
تاریخ عضویت: خرداد ۱۳۸۶

تشکرها : 0
( 2 تشکر در 1 ارسال )
ارسال: #4
RE: تعریف کلاس در dll و استفاده از آن در exe (حیاتی)(حیاتی) لطفا کمک کنید
محمد جان من ساخت توابع و استفاده از اونها رو در دلفی
می دونم و حتی چندین دی ال ال تو دلفی نوشتم من میخام
یک کلاس رو در دی ال ال پیاده سازی کنم، لطفا توضیحات رو
قشنگ بخونید.

در هر صورت از کمک شما متشکرم.
۲۴-آبان-۱۳۸۶, ۱۳:۴۹:۱۰
ارسال‌ها
پاسخ
Mamad2003 آفلاین
کاربر با تجربه
****

ارسال‌ها: 1,150
موضوع‌ها: 18
تاریخ عضویت: آذر ۱۳۸۲

تشکرها : 9
( 388 تشکر در 232 ارسال )
ارسال: #5
RE: تعریف کلاس در dll و استفاده از آن در exe (حیاتی)(حیاتی) لطفا کمک کنید
درسته رفیق ! من درست نخوندم ! Shy
متاسفانه واسه این مشکل چیزی نتونستم پیدا کنمSad

گويند بهشت و حور و کوثر باشد  ..  جوي می و شير و شهد و شکر باشد
پر کن قدح باده و بر دستم نه      ..   نقدي ز هزار نسيه خوشتر باشد  
۲۴-آبان-۱۳۸۶, ۱۹:۰۹:۴۶
ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #6
RE: تعریف کلاس در dll و استفاده از آن در exe (حیاتی)(حیاتی) لطفا کمک کنید
برای این کار می تونید یک Interface تعریف کنید که بین پروژه ایی که از DLL استفاده میکنه و خود DLL مشترکا استفاده بشه:

کد:
unit uTestInt;

interface

type
ITest = interface
function Add(a,b: real): real;
procedure TestProc;
end;

implementation

end.* این یونیت یک اینترفیس ساده با دو متد تعریف میکنه. این یونیت باید در هر دو پروژه use بشه.

حالا باید یک کلاس در DLL تعریف کنید که متدهای Interface بالا را پیاده سازی کنه. یک تابع هم باید بنویسید که یک نمونه از این کلاس ایجاد کنه و نتیجه را بصورت Interface بالا (در این مثال ITest) برگردونه:

کد:
library dllTest;

uses
SysUtils,
uTestInt in 'uTestInt.pas';

{$R *.res}
type
TTest = class(TInterfacedObject,ITest)
public
function Add(a,b: real): real;
procedure TestProc;
end;

{ TTest }

function TTest.Add(a, b: real): real;
begin
Result := a + b;
end;

procedure TTest.TestProc;
begin
//nothing;
end;

//////////////////////////////////////
function CreateTest: ITest; stdcall;
begin
Result := TTest.Create;
end;

exports
CreateTest;

begin
end.* دقت کنید که تابع CreateTest نتیجه را بصورت ITest برمی گردان (اینترفیس)د، نه TTest.

در مرحله آخر هم باید در پروژه ایی که از DLL استفاده می کند، یونیتی که تعریف اینترفیس در آن است را به لیست uses اضافه و تابع CreateTest را تعریف کنید:


کد:
function CreateTest: ITest; stdcall; external 'dllTest.dll' name 'CreateTest';حالا با ایجاد یک متغیر از نوع ITest و نسبت دادن خروجی تابع CreateTest به آن، می توانید یک نمونه از اینترفیس ITest که توسط کلاس TTest در dllTest.dll پیاده سازی شده است، داشته باشید. کد کامل پروژه:

کد:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,
uTestInt;

type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
Test : ITest;
end;

function CreateTest: ITest; stdcall; external 'dllTest.dll' name 'CreateTest';
var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Test := CreateTest;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
R : real;
begin
if Assigned(Test) then
begin
R := Test.Add(2,2);
ShowMessage(FloatToStr®)
end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Test := nil;
end;

end.* دقت کنید که نمونه ایی از ITest که ساختیم و به متغیر Test اختصاص دادیم، هیچوقت Free نشد، بلکه فقط مقدار Test را برابر با nil کردیم. علتش هم استفاده از Interface است. نوع Interface در دلفی Reference-counted هست و بطور خودکار آزاد می شود.
بجای Interface می تونستید از نوع های دیگه هم استفاده کنید:
1- Pointer: در صورت استفاده از Pointer کد ساده تر می شد، اما باید مقدار برگشت داده شده از تابع CreateTest را به کلاس مورد نظر خود Type Cast می کردید. و امکان استفاده از Code Completion هم در زمان کدنویسی نداشتید. Object ایجاد شده هم باید توسط یک تابع دیگر Free می شد.
2- استفاده از Abstract Class. در دلفی Abstract Class وجود نداره، ولی می تونید کلاسی تعریف کنید که تمام متدهای آن Virtual و Abstract باشند. در صورت استفاده از این روش، تمام مزایای استفاده از Interface به غیر از Free شدن خودکار را داشتید.

البته تمام این ها در صورتی است که مجبور به استفاده از DLL باشید، وگرنه با استفاده از Package ها در دلفی می توان به راحتی یک کلاس را پیاده سازی کرد و از آن استفاده کرد.
۲۵-آبان-۱۳۸۶, ۱۰:۰۴:۰۶
وب سایت ارسال‌ها
پاسخ
black-scorpion آفلاین
تازه وارد

ارسال‌ها: 16
موضوع‌ها: 5
تاریخ عضویت: خرداد ۱۳۸۶

تشکرها : 0
( 2 تشکر در 1 ارسال )
ارسال: #7
RE: تعریف کلاس در dll و استفاده از آن در exe (حیاتی)(حیاتی) لطفا کمک کنید
lord_viper واقعا از کمکت متشکرم ولی اگه امکان داره یک فایل ضمیمه برام بزار
دقیقا این چیزایی که گفتی رو تو یه سورس دلفی برام بزار.
واقعا بازم دستت درد نکنه. خیلی ممنون.
منتظر فایل ضمیمه هستم.
۲۵-آبان-۱۳۸۶, ۲۲:۰۷:۱۸
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  [سوال] خیلی مهم لطفا کمک کنید re123 1 1,907 ۲۱-دى-۱۳۹۱, ۱۱:۱۷:۲۰
آخرین ارسال: lord_viper
Shy اساتید لطفا راهنمایی کنید dobidob 3 3,105 ۲۷-مهر-۱۳۹۱, ۱۸:۵۳:۴۴
آخرین ارسال: lord_viper
  تعریف آرایه های دوبعدی یا چندبعدی پویا در دلفی mojtabamalaekeh 0 4,616 ۱۰-آذر-۱۳۸۹, ۰۰:۴۳:۴۹
آخرین ارسال: mojtabamalaekeh
Question خواهش می کنم کمک کنید The.Ghost 2 2,910 ۲۱-شهریور-۱۳۸۹, ۱۸:۱۶:۳۲
آخرین ارسال: aydin_key
Question کلاس The.Ghost 3 2,333 ۲۶-بهمن-۱۳۸۸, ۱۱:۴۸:۰۹
آخرین ارسال: lord_viper
  لطفا راجع ارتباط با com port ها ... s_mostafa_h 5 7,288 ۲۳-مرداد-۱۳۸۸, ۱۵:۰۲:۴۱
آخرین ارسال: ahp_online
  نام کاربری در مسیر My Documents و چگونگی تعریف به برنامه!! IISecurity.C 13 8,546 ۱۷-اسفند-۱۳۸۶, ۱۱:۳۵:۴۸
آخرین ارسال: lord_viper
  دلفی کارا کمک کنید cplusplus6 10 8,306 ۰۷-دى-۱۳۸۶, ۰۹:۰۴:۱۵
آخرین ارسال: lord_viper
  چگونگي شبيه سازي كليدenter لطفا كمك mehdi-213 7 4,255 ۰۷-اسفند-۱۳۸۴, ۰۷:۲۶:۴۶
آخرین ارسال: lord_viper
  آقایون .. خانوما ... به من تازه دلفی کار کمک کنید ! afshin 14 9,813 ۱۱-دى-۱۳۸۳, ۱۱:۰۳:۱۸
آخرین ارسال: amirjan

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS