PDA

View Full Version : قرار دادن دی ال ال در فایل اگزه



amir_civil
شنبه 09 اردیبهشت 1385, 21:45 عصر
سلام دوستان
من یه دی ال ال با سی# نوشتم حالا میخام اونرو توی فایل اگزه که با وی سی نوشتن بزارم که همیشه با هم باشن
چه کار میشه کرد
ممنون

sasan_vm
شنبه 09 اردیبهشت 1385, 21:55 عصر
سلام
از DLL باید یک فایل LIB درست کنی که بشه با exe لینکش کرد.
همراه DBS ابراز IMPLIB اینکار را انجام میدهد حتما برای VS هم چنین برنامه ای هست :)

amir_civil
شنبه 09 اردیبهشت 1385, 22:45 عصر
سلام دوست من
ممنون
چه جوری مشیه فایل lib ساخت؟

Inprise
شنبه 09 اردیبهشت 1385, 23:55 عصر
مفهوم Lib مترادف با عدم نیاز به DLL نیست ؛ Lib کمک میکنه فراخوانی توابع DLL در زمان اجرای اولیه نرم افزار اتفاق بیفته و Address Translation توسط OS Loader انجام بشه ، و الا در زمان اجرا باید DLL فراخوانی بشه ( LoadLibrary Family ) و ادرس تابع مورد نظر پیدا بشه ( GetProcAddress ) و بعد از توابع استفاده بشه ، و در هر حال ، وجود DLL یک ضرورت است .

amir_civil
یک شنبه 10 اردیبهشت 1385, 05:59 صبح
سلام
ممنون
من میخام کاری کنم که دی ال ال همیشه کناره فایل باشه
به عبارتی یه جوری به هم چسبیده باشن که دیگه مشکلی پیش نیاد
میشه کاری کرد؟
ممنون

SH.Daneshvar
یک شنبه 10 اردیبهشت 1385, 08:59 صبح
دوست عزیز DLL یعنی
Dynamic Link Library
DLL کارش همینه که بصورت Dyanamic با exe یا DLL های دیگه رابطه برقرار کنه
شما اگر میخواهید با exe باشه باید یک LIB بسازید. یعنی یک پروژه Library.

Blaster
یک شنبه 10 اردیبهشت 1385, 12:28 عصر
سلام،
البته که میشه کاری کرد ولی باید ببینی ارزش داره یا نه!
دوتا راه حل به نظرم میاد :
1 - فایل DLL رو داخل exe به عنوان Custom Resource قرار بدی و وقتی که exe اجرا میشه باید کدی رو بنویسی که فایل DLL رو ازResource Exe به یک فایل در بیرون انتقال بده و بعد با استفاده از روش Inprise ، تابع مورد نظر رو Load کنی ! البته من از # C اطلاعی ندارم . چون ممکنه که نحوه نام گزاری توابع در اون با ++C فرق کنه دراینصورت نمی تونی تابع رو Load کنی و مشکلت میشه دوتا !!!
2 - تابعی که توی DLL وجود داره رو دوباره با ++C بنویسی که می تونی هم از اون توی Source استفاده کنی هم می تونی در قالب Static Lib داشته باشی و درهر صورت نیاز به DLL نداری!

البته با توجه به این نکته که اون DLL ای که نوشتی با #C هست و ممکنه که خودش به DLL های دیگه نیاز داشته باشه دراینصورت حتی اگر هم DLL رو با exe یه جا داشته باشی باز ممکنه که روی سیستم مقصد اجرا نشه ! بنابراین روش دوم دردسرش کمتر!