tlenek

Kilka dni temu, chciałem sobie zaktualizować wtyczkę myself2 dla komunikatora Tlen.pl. W ogóle to chciałem go nieco zmodyfikować, aby bardziej stał się „generyczny”, 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ć jedna klasę, do łatwej obsługi dialogów opcji wtyczki.
I zrodziła się idea, a raczej znów zaczęło chodzić mi po głowie napisanie 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:

#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ł jedna z głównych inspiracji :P

Kolejny projekt na głowie, gdy inne znajdują się w stanie „rozkopania”, serwer proxy, xiT++

Takie życie, ale na razie musze odłączyć się od kodu i zakończyć aktualna sesje :P

Jedno przemyślenie nt. „tlenek”

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *