Skocz do zawartości

Aplikacja Pluginy [ Pisanie plugin'owalnej aplikacji ]


Recommended Posts

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. :)

Link do komentarza
Udostępnij na innych stronach

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;
}
Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...