tlenek

23 września 2007

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

Podobne notatki:

Może zainteresują Cię również następujące, pododbne notatki:

Komentarze i nawiązania (1)

Kanał RSS komentarzy

  1. Oj szkoda, że to nie dla Mirandy ;)

Dodaj swój komentarz

Możesz użyć tych tagów XHTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Jeśli chcesz wstawić kilku linijkowy fragment kodu, użyj tagów <pre lang="x"></pre> (gdzie x język kodu np. cpp, perl, html). W ten sposób kod zostanie odpowiednio sformatowany i pokolorowany przez system.

Uwaga!

Na tym blogu działa system cache oraz filtr antyspamowy. Twój komentarz może być widoczny na stronie z pewnym opóźnieniem. Proszę o cierpliwość. Jeśli utraciłeś już wszystkie jej zasoby poinformuj mnie o tym, być może system uznał Cię za spamera ;)