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
lopik:
06/11/2007 @ 15:51:08 | #1
Oj szkoda, że to nie dla Mirandy ;)