ورود

View Full Version : پياده سازي يه انجين پلاگين بيس



pswin.pooya
یک شنبه 28 فروردین 1390, 22:00 عصر
سلام

من ميخوام انجينم رو به صورت پلاگين بيس در بيارم. توي ويرايش قبلي انجين من فقط اين امكان رو ميداد م كه پلاگينها پسوندهاي مختلف فايل رو به ريسورس منيجر و همراه يه تابع براي لود كردن اون پسوند بدن اما به نظرم اين كافي نيست و بايد پلاگين ها به هر قسمتي كه ميخوان اضافه بشن. چه شكلي يه سيستم پلاگين بيس واقعي رو پياده سازي كنم؟

سپول
چهارشنبه 31 فروردین 1390, 11:37 صبح
کاری که من انجام دادم ...
1) پلاگین هارو بصورت DLL درست کن.
2) یک کلاس abstract توی موتورت درست کن مثل این :


class PluginHeader {
public:
virtual void GetPluginDesc(PluginDesc* desc) = 0;
virtual void* CreatePluginObject() = 0;
virtual void DestroyPluginObject( void* ) = 0;
}


2) تابع تعریف کن که main entry ماجول های پلاگین می شه و باهاش instance های PluginHeader رو درست می کنه. یکی دیگه هم برای destroy کردنش


typedef PluginHeader* (*FnCreatePlugin)();
typedef void (*FnDestroyPlugin)( PluginHeader* );


3) در فایل پلاگین (DLL) یک implementation از اون کلاس و توابع زیرش می نویسی که باعث می شه بصورت runtime بتونی object های abstract خاص (مثل renderer) رو بسازی - pluginHeader->CreatePluginObject
4) یک manager توی موتور می نویسی که بتونه فایل های plugin رو بخونه ، load و unload کنه و غیره ... (LoadLibrary، GetProcAddress)