با سلام خدمت دوستان.
مي خواستم بدونم كه فايل هاي Dll در دلفي به چه كار مي آيد واگر مي شه توضيح مناسبي در ايم مورد بگين. ممنون.
Printable View
با سلام خدمت دوستان.
مي خواستم بدونم كه فايل هاي Dll در دلفي به چه كار مي آيد واگر مي شه توضيح مناسبي در ايم مورد بگين. ممنون.
فایل های DLL یا Dinamic Link Library شامل یکسری توابع و کدهای زبان ماشین (کامپایل شده) هستند.
فرض کن تابعی رو برای محاسبه تاریخ شمسی از قمری نوشتی و نمیخوای کسی الگوریتم کارت رو بفهمه (!!!) اون تابع رو در یک DLL ذخیره میکنی و نحوه استفاده از اون (نام تابع،پارامترها و....) رو معرفی میکنی و اونو به دوستت می فروشی تا بدون اینکه از الگوریتم کارت سر در بیاره بتونه از اون تابع استفاده کنه !
البته این یه مثال بود !
بعضی توابع و فایل مهم که در برنامه لازمه هم روی سیستم به صورت DLL هستند.
مثلا برنامه هایی که با دلفی مینویسی از توابع خاصی از سیستم عامل ویندوز استفاده میکنن که در DLL هایی مثال Kernel32.dll و user32.dll و.... قرار دارن.
توضیحش مفصله !
با سلام خدمت دوستان.
ادميرال جان اولا لطف كردين كه من رو راهنمايي كردين. حالا اگه امكانش هست بگين كه چطوري مي شه يك فايل دي ال ال ساخت و از آن استفاده كرد؟
يك چيزه ديگه كه من تاپيك هاي ديگه هم زدم. چرا به آنها جواب نمي دهيد؟
ممنون.
سلام دوست عزیزنقل قول:
با سلام خدمت دوستان.
ادميرال جان اولا لطف كردين كه من رو راهنمايي كردين. حالا اگه امكانش هست بگين كه چطوري مي شه يك فايل دي ال ال ساخت و از آن استفاده كرد؟
دلفی رو باز کنید و از منوی File -> New->Other گزینه Dll wizard رو انتخاب کنید.
حالا قبل از Begin فانکشن ها و پروسیجرهای مورد نظر خودتون رو بنویسید.
حالا بعد از تعریف توابع و قبل از begin بنویسید Exports و بعدش نام توابع رو با کاما از هم جدا کنید و آخرش هم سمی کالن بزارید.مثلاً:
حالا پروژه رو Save کنید و یک فایل DLL هم توی پوشه محل ذخیره بوجود میاد !کد:exports
test1,test2;
این روش ساخت DLL بود. اگه روش فراخوانیش رو هم خواستی بگو تا بنویسم.
دو تا احتمال داره :نقل قول:
يك چيزه ديگه كه من تاپيك هاي ديگه هم زدم. چرا به آنها جواب نمي دهيد؟
ممنون.
یا عنوان تاپیک توجه من رو جلب نکرده!
یا بلد نبودم ! (این یکی احتمالش بیشتره!)
با سلام خدمت دوستان.
ادميرال جان لطف كنيد و اين موضوع را تا جايي كه به درد بخوره ادامه بدهيد ممنون مي شم.
ممنون.
سلام
روش ایجا فایل DLL رو که گفتم حالا می مونه روش فراخوانی یک تابع یا پروسـجـر از داخل فایل DLL :
باید در قسمت تعریف توابع برنامه (بعد از implementation) امضای کامل تابع رو بنویسید.
که امضای تابع شامل نام + پارامترها + نوع بازگشتی میشه.
بعد نوع فراخوانی رو مشخص میکنید که میتونه StdCall یا Register و ... باشه.
بعد هم با عبارت External مشخص می کنید روال باید از کدوم DLL لــود بشه.
نتیجه یه چیزی شبیه این میشه :
توی دلفی اگه نوع فراخوانی رو مشخص نکنی به طور پیش فرض Register در نظر گرفته میشه.کد:function mul(x:integer):integer;register; external 'MyDll.Dll'
procedure hello;stdcall;external 'MyDll.Dll'
موفق باشید.
با سلام خدمت دوستان.
ادميرال جان اين كارهايي كه گفتي كردم ولي دفعه اول جواب داد و يك فايل Dll درست كرد ولي دفعات بعد چهار فايل ذخيره مي كرد كه هيچ كدام Dll نبود. چند بار هم امتحان كردم .اگه مي شه بگو مشكل كجاست؟ مطلب ديگه اين كه در مورد نوع فراخواني هم بيشتر توضيح بده؟
بعد از اینکه Save رو زدی یکبار هم Run رو بزن.(کلید F9)نقل قول:
ادميرال جان اين كارهايي كه گفتي كردم ولي دفعه اول جواب داد و يك فايل Dll درست كرد ولي دفعات بعد چهار فايل ذخيره مي كرد كه هيچ كدام Dll نبود. چند بار هم امتحان كردم .اگه مي شه بگو مشكل كجاست؟
اصلاً نوع فراخوانی رو ننویس خودش پیش فرض Register هست و لازم نیست کار خاصی انجام بدی.نقل قول:
مطلب ديگه اين كه در مورد نوع فراخواني هم بيشتر توضيح بده؟
با سلام خدمت دوستان.
ادميرال جان دستت درد نكنه از اين كه راهنماييم كردي.
ولي وقتي كه مي خواهم كه برنامه را اجرا كنم يك پيغام خطا مي ده به اين مفهوم.
Can not Debug project unless a host application is defined. use the run|parameters... debug box.
كلا براي اطلاعات عمومي گفتم كه نوع فراخواني چي هست و چي كار مي كنه؟نقل قول:
اصلاً نوع فراخوانی رو ننویس خودش پیش فرض Register هست و لازم نیست کار خاصی انجام بدی.
ممنون.
طبیعیه، چون این فایل اجرایی نیست که اجرا بشه.فقط واسه این گفتم که فایل DLL رو بسازه. فایل DLL رو ساختش ؟نقل قول:
ادميرال جان دستت درد نكنه از اين كه راهنماييم كردي.
ولي وقتي كه مي خواهم كه برنامه را اجرا كنم يك پيغام خطا مي ده به اين مفهوم.
Can not Debug project unless a host application is defined. use the run|parameters... debug box
باید با اسمبلی آشنایی داشته باشی تا اساسی مفهومش رو متوجه بشی.نقل قول:
كلا براي اطلاعات عمومي گفتم كه نوع فراخواني چي هست و چي كار مي كنه؟
اینا رو بخون( از Help دلفی) :
کد:Calling conventions
Directive Parameter order Clean-up Passes parameters in registers?
register Left-to-right Routine Yes
pascal Left-to-right Routine No
cdecl Right-to-left Caller No
stdcall Right-to-left Routine No
safecall Right-to-left Routine No
The default register convention is the most efficient, since it usually avoids creation of a stack frame. (Access methods for published properties must use register.) The cdecl convention is useful when you call functions from shared libraries written in C or C++, while stdcall and safecall are recommended, in general, for calls to external code. On Windows, the operating system APIs are stdcall and safecall. Other operating systems generally use cdecl. (Note that stdcall is more efficient than cdecl.)
The safecall convention must be used for declaring dual-interface methods. The pascal convention is maintained for backward compatibility. For more information on calling conventions, see Program control.
The directives near, far, and export refer to calling conventions in 16-bit Windows programming. They have no effect in 32-bit applications and are maintained for backward compatibility only.