summaryrefslogtreecommitdiff
path: root/plugins/example/main.cpp
blob: 1eb8ac9f9fd8e0aecb7d9d2bdc1c172b12904c05 (plain)
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;
}