برای یک آموزشی نیاز داشتم که یک فایل اجرایی از داخل یک dll تابعی رو فراخوانی کنه ، میخواستم از برنامه های موجود استفاده کنم ولی خب دیدم خودم یک برنامه بنویسم و توضیحات با اون بدم خیلی قابل ملموس هستش .برای همین این پست ایجاد کردم و قرار تو این پست با کیوت و سی پلاس یک dll بسازیم و با یک برنامه کنسولی کیوت از اون استفاده کنیم .
برای این پست من از QT Creater استفاده کردم .
برای ایجاد یک Dll یک پروژه بصورت زیر ایجاد میکنیم :
نکته : محیط من 64 بیتی هستش و DLL و برنامه کنسولی هم 64 بیتی می باشد.اگه شما خواستید تو یک محیط 32 بیتی اجرا بگیرید باید نوع 32 بیتی رو مدنظر بگیرید .
در فایل baddll.h اسم تابعمان و همچنین یک کتابخونه برای چاپ رشته را اضافه میکنیم :
اسم تابع من devil_fun() می باشد خروجی نداره و فقط قرار یک متنی رو چاپ کنه .
برای اضافه کردن بدنه تابعمون باید به فایل baddll.cpp بریم ولی برای راحتی کار رو اسم تابع راست کلید کنید و گزینه Refactor رو مطابق شکل زیر انتخاب کنید :
خب حالا تو فایل baddll.cpp هستیم و میخواییم بدنه تابعمون رو بهش اضافه کنیم :
کارمون تموم شد و Dll ما آماده کامپایل شدن و ساخت هستش .
پس بطور خلاصه ما یک dll با نام baddll.dll ایجاد کردیم که داخل اون یک کلاس بنام BadDll و یک تابع بنام devil_fun() می باشد .
برای اینکه این dll رو استفاده کنیم از یک برنامه استفاده میکنیم که در محیط کنسول کیوت ایجاد کردیم.
برای ایجاد یک پرژه جدید برای ساخت برنامه کنسولی در کیوت بدین شکل عمل میکنیم :
پروژه کنسولی ما آماده هست و تنها کاری که نیاز هست اضافه کردن dll و استفاده از تابع devil_fun() می باشد .برای این منظور از پروژه قبلی 2 فایل baddl.h و BadDLL_global.h رو کپی میکنیم و در مسیر پروژه کنسولیمون اضافه میکنیم :
حالا این دو فایل باید به پروژه امون هم اضافه کنیم .برای این کار رو پروژه امون راست کلیک کرده و ادامه میدیم :
و 2 تا فایلمون رو انتخاب کرده و open میزنیم. اگه درست رفته باشید فایلها به پروژه امون اضافه میشوند و به شکل زیر نمایش داده می شن :
در ادامه کدهای خودمون رو به تابع main.cpp اضافه میکنیم :
در شکل بالا ما 2 تا کتابخونه آوردیم که یکی برای چاپ و یکی هم برای استفاده از تابع dll میباشد. در ادامه یک متنی رو چاپ کردیم و سپس یک شی از dllمون ساختیم و تا به تابع devil_fun() دسترسی داشته باشیم و بتونیم استفاده کنیم .
تنها کاری که مونده این هست که مسیر فایل dll مون رو به پروژه بدیم که من چون فایل dll رو کنار exe میزارم همون مسیر کنارش میدم.برای این کار یک خط کد به فایل target.pro اضافه میکنیم :
کار تموم و پروژه ما قابل استفاده هست و فقط نیاز به کامپایل و ساخت داره :
در آخر اگه پروژه رو اجرا کنیم نتیجه زیر رو میبینیم :
برای دسترسی راحت تر کد و فایلها رو گذاشتم تو گیتهاب ، که میتونید از این لینک دسترسی داشته باشید.