Projekt tlenek

tech • 363 słowa • 2 minuty czytania

Kilka dni temu, chciałem sobie zaktualizować wtyczkę myself2 dla komunikatora Tlen.pl. W ogóle to chciałem ją nieco zmodyfikować, aby stała się bardziej “generyczna”, to jest, aby dodanie obsługi nowego protokołu ograniczało się do dodania identyfikatora protokołu do głównej tablicy i dodanie odpowiednich zasobów (kontrolek w dialogu opcji).

Pomysł dobry, tyle, że trzeba byłoby przepisać z 90% kodu ;)

Wtedy zacząłem sobie pisać jedną klasę, do łatwej obsługi okna opcji wtyczki. I zrodziła się idea, a raczej znów zaczęło chodzić mi po głowie, napisania obiektówki na API tlenowe, a może nawet coś więcej…

W ten sposób 20 września został rozpoczęty projekt o kodowej nazwie tlenek. Aktualnie rozwijana jest wersja 0.2 z nieco innymi założeniami, niż w przypadku budowania pierwszych założeń projektowych i implementacji.

Typowy, szablonowy plugin dla Tlena wygląda tak:

#include "stdafx.h"
#include "AggressiveOptimize.h"
#include <stdio.h>

HINSTANCE hInst;
TLENPLUGINFUNCTIONS* tlen_functions;

TLENPLUGININFO pluginInfo = {
	sizeof(TLENPLUGININFO),
	"Nazwa pluginu",
	PLUGIN_API_VERSION,
	MAKE_DWORD_VERSION(0,0,0,1),
	"Opis pluginu",
	"© 2007 malcom",
	"MalCom",
	"me@malcompl",
	"http://malcom.pl",
	0, 0, 0, 0
};


extern "C" __declspec(dllexport) TLENPLUGININFO* GetPluginInfo(DWORD TlenVersion);
extern "C" __declspec(dllexport) int LoadPlugin(TLENPLUGINFUNCTIONS* tlen_functions);
extern "C" __declspec(dllexport) int UnloadPlugin(void);


BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
	hInst = hinstDLL;
	return true;
}

__declspec(dllexport) TLENPLUGININFO* GetPluginInfo(DWORD tlenVersion) {
	return &pluginInfo;
}

__declspec(dllexport) int LoadPlugin(TLENPLUGINFUNCTIONS* functions) {
	tlen_functions = functions;

	MessageBox(NULL, "Plugin załadowany", "Prosty plugin VC++", MB_OK);
	return 0;
}

__declspec(dllexport) int UnloadPlugin(void) {

	MessageBox(NULL, "Plugin wyładowany", "Prosty plugin VC++", MB_OK);
	return 0;
}

Ten sam plugin z wykorzystaniem biblioteki tlenek:

#include "stdafx.h"
#include "AggressiveOptimize.h"
#include <stdio.h>

#include "tlenek\tlenek.h"


class MyPlug : public Plugin {
public:
	MyPlug() {
		SetPluginVersion(0, 0, 0, 1);
		SetPluginInfo("Nazwa pluginu", "Opis pluginu", "© 2007 malcom");
		SetPluginAuthor("MalCom", "me@malcom.pl", "http://malcom.pl");
	}

	int OnPluginInfo() { return 0; }
	int OnLoad();
	int OnUnload();
};

IMPLEMENT_PLUGIN(MyPlug)


int MyPlug::OnLoad() {

	MessageBox(NULL, "Plugin załadowany", "tlenek", MB_OK);
	return 0;
}


int MyPlug::OnUnload() {

	MessageBox(NULL, "Plugin wyładowany", "tlenek", MB_OK);
	return 0;
}

Pokazałbym jakiś inny, lepszy przykład, ale API ciągle się zmienia ;)

Widać duże podobieństwo do wxWidgets. To właśnie ten toolkit był jedną z głównych inspiracji…

Kolejny projekt na głowie, gdy inne znajdują się w stanie “rozkopania”, serwer proxy, xiT++, … Takie życie, ale na razie muszę odłączyć się od kodu i zakończyć aktualną sesję na uniwerku :P

Komentarze (1)

lopik avatar
lopik
20071106-155108-lopik

Oj szkoda, że to nie dla Mirandy ;)

Dodaj komentarz

/dozwolony markdown/

/nie zostanie opublikowany/