استفاده از dll در پروژه به صورت استاتیک - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

استفاده از dll در پروژه به صورت استاتیک

0 امتیاز
سلام . اگر فقط dll از یک کتابخانه را داشته باشیم و signature کتابخانه هم موجود باشه و lib آن موجود نباشه راهی وجود داره بشه به صورت استاتیک کتابخانه را استفاده کنم و مجبور ناشم یکی یکی توابع را load کنم؟
سوال شده تیر 31, 1399  بوسیله ی .bahman (امتیاز 137)   3 18 24
نه نمی‌تونید اینکار رو بکنید.

2 پاسخ

+1 امتیاز
 
بهترین پاسخ
زمانی که یک لایبرری به صورت shared که در ویندوز به نام dll شناخته میشود، ایجاد میشه function  calling convention های ایجاد شده در لایبری متفاوت خواهند بود بنابراین شما نمی توانید یک dll را تبدیل به یک لایبرری استاتیک lib کنید تا لینکر در زمان کامپایل از این کتابخانه استفاده نماید

مضاف بر اینکه فضای آدرس دهی کتابخانه dll متفاوت تر از فضای آدرس دهی یک کتابخانه استاتیک هست، به همین علت هم هست که معمولا استفاده از کتابخانه های dll سربار بیشتری دارند.

و نکته بعدی معمولا کتابخانه های dll یک رفرنس از یک اینترفیس را باز میگردانند به فضای آدرس پروسس شما به همین علت در اولین بار که بارگذاری میشوند، تا زمانی که پروسس شما بسته نشود شما با همین رفرنس اینترفیس می توانید توابع را فراخوانی کنید مگر اینکه تابعی در کتابخانه برای این منظور ایجاد نشده باشد

که در اینصورت می توانید بعد از بارگذاری اولیه کتابخانه ، رفرنس تمام توابعی که لازم دارید یکبار فراخوانی کنید داخل یک لیست ویا یک کانتینر که می تواند اشاره گرهایی با تابع را در خود داشته باشد، توابع کتابخانه را ذخیره کنید و هر جا هم که لازم شد از اون اشاره گرهای توابع استفاده کنید که ایجاد کردید

این کار به سادگی با نوشتن یک wrapper مناسب برای این منظور قابل انجام می باشد
پاسخ داده شده تیر 31, 1399 بوسیله ی فرهاد شیری (امتیاز 97)   1 3
انتخاب شد شهریور 8, 1402 بوسیله ی مصطفی ساتکی
0 امتیاز

به صورت استاتیک می تونید ازش استفاده کنید نیازی نیست هم با loadlibrary لودش کنید و آدرس توابع داخل کتابخانه را بگیرید .از این پست استفاده کنید ولی ماهیتش همچنان داینامیکه یعنی هنوز به خود  dll نیاز دارید.

پاسخ داده شده مرداد 25, 1402 بوسیله ی farshid_siyah (امتیاز 1,463)   3 11 16
...