1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
#include <wx/wx.h>
#include <wx/stdpaths.h>
#include <pluginapi.h> //this is necessary, PLUGININFO structure, other related to load/unload plugin code
PLUGINLINK *pluginLink;
class wxPluginForEvilCore: public wxApp //this is like on default wxwidgets application
{
virtual bool OnInit();
};
IMPLEMENT_APP_NO_MAIN(wxPluginForEvilCore) //main() does not needed, we will create instance by hand later
bool wxPluginForEvilCore::OnInit()
{
wxMessageBox(_T("I am a plugin example") ,_T("Info"), wxOK | wxICON_INFORMATION);
return true;
}
#ifdef _WIN32
HINSTANCE hInst;
BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved ) //default dll entry point
{
hInst = hinstDLL;
return TRUE;
} //windows specific, does not needed ?
#endif
PLUGININFO pluginInfo =
{
sizeof(PLUGININFO), //size of structure
(wchar_t*)L"example plugin", //name
0, //description
0, //author
0, //author email
0x00010101 //version 0.1.1.1
};
#ifdef _WIN32
extern "C" __declspec(dllexport) PLUGININFO* set_plugin_info()
#else
extern "C" PLUGININFO* set_plugin_info()
#endif
{
return &pluginInfo; //necessary, our plugin info for core can recognize us
}
#ifdef _WIN32
extern "C" __declspec(dllexport) int load(PLUGINLINK *link) //basic initialisation, registering new functions, do other basic initialisation, you can create infinite loop, or other code which use many time here, only fast basic initialisation
#else
extern "C" int load(PLUGINLINK *link)
#endif
{
pluginLink = link; //necessary
//some basic initialisation code
return 0; //all ok, retrun 0
}
#ifdef _WIN32
extern "C" __declspec(dllexport) int on_modules_loaded() //load main code from here, all services from other plugins must be avaible here
#else
extern "C" int on_modules_loaded() //load main code from here, all services from other plugins must be avaible here
#endif
{
wxApp::SetInstance(new wxPluginForEvilCore()); //create instance, i think here is right place, not in load where we do only basic initialisation
#ifdef _WIN32
wxEntry(GetModuleHandle(NULL),NULL,NULL,SW_SHOW);
#else
int i = 0;
char **params = (char**)malloc(2);
params[0] = (char*)malloc(2);
strcpy(params[0], "");
wxEntry(i, params);
free(params[0]);
free(params);
#endif
return 0;
}
#ifdef _win32
extern "C" __declspec(dllexport) int unload()
#else
extern "C" int unload()
#endif
{
//do some cleanup on exit
wxEntryCleanup(); //call it before, or after other cleanup
return 0;
}
|