OTx Napisano Lipiec 20, 2008 Zgłoś Udostępnij Napisano Lipiec 20, 2008 Witam, Chciałem się wypytać i dowiedzieć czegoś więcej na temat pisania pluginowalnej aplikacji. Jak się za takie cuś zabrać już w fazie 'projektowania', żeby to było potem skalowalne i łatwe do rozbudowywania? Macie jakieś rady? I wogóle to jak takie pluginy odbługiwać? Jak je wywoływać? Na jakiej zasadzie działają owe pluginy? Wiadomo, że to dll'e, ale jak one wogóle współpracują z orginalną aplikacją. Z góry dzięki za info. ps.Jak komuś moje pytania wydają się noob'owate to niech nie komentuje a ignoruje. :) Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Reverend Napisano Lipiec 21, 2008 Zgłoś Udostępnij Napisano Lipiec 21, 2008 Musisz stworzyć sobie pewien interfejs. Pamiętaj, że przy wywołaniu LoadLibrary() wykonywany jest kod inicjalizujący w tej bibliotece, zwracający 0 jeśli się powiodło. Twój interfejs powinien nakazywać, aby to w tej części biblioteki plugin się "przedstawił". W ten sposób dowolny .dll nie będzie rozpoznawany jako plugin. Dalej to już wiele zależy od specyfiki głównego, "pluginowalnego" programu. Jeśli np. chcesz, aby kontrolę nad częścią zasobów (np. obsługiwanie plików mp3) sprawował dany plugin, to określasz sobie zestaw funkcji, które dany plugin musi posiadać oraz jakąś procedurę, która poinformuje ten plugin, że uzyskał kontrolę nad zasobem. Przykład: Program otwiera pliki i zależnie od rodzaju coś dalej z nimi robi. Ale te działania na różnych typach plików nie są wbudowane w program, ale są pluginami. Główny program wymaga, by plugin przedstawił się - czyli wskazał jakie pliki umie obsługiwać. Wymagana jest także implementacja metod: bool acquireResourceControl() - do poinformowania plugina o tym, że "został wybrany", bool processCommand() - do oddania obsługi konkretnego żądania do plugina, itp. No tak jak mówię, to wszystko zależy od specyfiki programu. Jedno co musisz zrobić to ustalić zestaw metod, które każdy plugin musi zaimplementować. Będą to metody do komunikacji. Zobacz sobie na szablon plugina do PEiDa. Mamy LoadDLL(), które zwraca string z nazwą. Mamy DoMyJob(). To najprostszy możliwy schemat :) #include #include "defs.h" DWORD DoMyJob(HWND hMainDlg, char *szFname, DWORD lpReserved, LPVOID lpParam) { //hMainDlg: HWND of PEiD window //szFname: Filename //lpReserved: PEiD passes 'PEiD' as the value //lpParam: NULL passed, for future use // Write your main code here return 1; } LPSTR LoadDll() { return "Name of the plugin"; } BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { switch(fdwReason) { case DLL_PROCESS_ATTACH: break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: break; } return TRUE; } Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.