PDA

View Full Version : استفاده استاتیک از یک تابع جدید در یک DLL، به طوری که Declar



SMA Soft
چهارشنبه 24 تیر 1383, 12:14 عصر
استفاده استاتیک از یک تابع جدید در یک DLL، به طوری که Declare آن قبلا وجود نداشته باشد.
فرض کنید می خواهیم از تابع SetLayeredWindowAttributes که تعریف آن به طور پیش فرض در Visual C++ 6.0 وجود ندارد استفاده کنیم.
همانطور که می دانید با توابع LoadLibrary و GetProcAddress می توان در حین اجرای برنامه، از تابعی درون یک DLL استفاده کرد. اما اگر بخواهیم به صورت استاتیک از آن تابع استفاده کنیم چطور ؟ همانند VB که با حکم Declare آن تابع را تعریف می کنیم.

Inprise
جمعه 26 تیر 1383, 01:11 صبح
استفاده استاتیک ... به طوری که Declare آن قبلا وجود نداشته باشد

هیچطوری .

SMA Soft
جمعه 26 تیر 1383, 22:16 عصر
آخه با VB و دلفی میشه. میخوام بدونم با VC هم میشه یا نه.

Inprise
شنبه 27 تیر 1383, 01:41 صبح
خوب بنده هم جواب دادم "نه" !

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

موفق باشی

seyedof
یک شنبه 01 شهریور 1383, 21:52 عصر
سلام
مگه توی وی بی یا دلفی اینطوری تابع استاتیک میشه؟ به هر حال چون تابع توی dll تعریف شده باید اوون dll رو هم همراه برنامه داد مگر اینکه جزو فایلهای خود کمپایلر یا خود ویندوز باشه.

اما اگر میخواهید تابعی رو صدا بزنین که lib اوون وجود نداره ولی dll رو دارین میتونین با استفاده از تابع LoadLibrary dllرو لود کنید بعدش با استفاده از GetProcAddress آدرس تابع مورد نظر رو به دست بیارین و صداش بزنید. البته باید آرگومانهای تابع مورد نظر رو بدونین که در مورد تابع مورد نظر شما این صدق میکنه.

ممنون علی

Trash
چهارشنبه 04 شهریور 1383, 19:48 عصر
جناب SMA Soft ، تا اونجایی که بنده اطلاع دارم VB از توابع API به صورت Static استفاده نمی کنه .
یعنی هیچ نرم افزاری از توابع API به صورت Static استفاده نمی کنه .چون استفاده از این توابع به صورت
Static (در صورت امکان) فقط باعث زیاد شدن کد برنامه و عدم هماهنگی با نسخه های جدید ویندوز میشه .
اما کاری که VB انجام میده فقط اونها رو تعریف می کنه و در پشت پرده با توابع مربوطه اونها رو Load می کنه.
که البته شما هم می تونید این کار رو دستی انجام بدین .