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)
Oj szkoda, że to nie dla Mirandy ;)