Plugin Development in C/C++
From DeleDWiki
| Plug-in Development |
|
This page collects information for plugin development in C/C++.
Minimal example
deledsdk.h
#ifndef _DELEDSDK_H_
#define _DELEDSDK_H_
#define DLL_EXPORT __declspec(dllexport)
#define STDCALL _stdcall
#define PR_GETMEM 0
#define PR_GETDATA 1
#define PR_SETDATA 2
typedef unsigned long dword;
typedef struct TCallBackRecord {
dword RequestID;
char* RequestXML;
char* ResponseXML;
dword ResponseSize;
} TCallBackRecord;
typedef dword(STDCALL *TCallBackProc)(TCallBackRecord*);
DLL_EXPORT char* STDCALL PluginName();
DLL_EXPORT char* STDCALL PluginDescription();
DLL_EXPORT char* STDCALL PluginDeleDVersion();
DLL_EXPORT char* STDCALL PluginVersion();
DLL_EXPORT char* STDCALL PluginAuthor();
DLL_EXPORT char* STDCALL PluginEmail();
DLL_EXPORT void STDCALL PluginSetCallback(TCallBackProc);
DLL_EXPORT void STDCALL PluginExecute();
#endif
example.cpp
#include "deledsdk.h"
#include <stdio.h>
TCallBackProc g_Callback;
char* STDCALL PluginName() {
return "Example Plugin"; }
char* STDCALL PluginDescription() {
return "Does a lot of foo"; }
char* STDCALL PluginDeleDVersion() {
return "1.8"; }
char* STDCALL PluginVersion() {
return "1.0"; }
char* STDCALL PluginAuthor() {
return "Grandmaster B"; }
char* STDCALL PluginEmail() {
return "plug@me.in"; }
void STDCALL PluginSetCallback(TCallBackProc cbProc) {
g_Callback = cbProc; }
void DeleD_FreeData(char* pData)
{
free(pData);
}
char* DeleD_GetData(char* RequestXML)
{
TCallBackRecord Rec;
Rec.RequestID = PR_GETMEM;
Rec.RequestXML = RequestXML;
g_Callback(&Rec);
Rec.RequestID = PR_GETDATA;
Rec.ResponseXML = (char*)malloc(Rec.ResponseSize);
g_Callback(&Rec);
return Rec.ResponseXML;
}
void DeleD_SetData(char* RequestXML)
{
TCallBackRecord Rec;
Rec.RequestID = PR_SETDATA;
Rec.RequestXML = RequestXML;
g_Callback(&Rec);
}
void STDCALL PluginExecute()
{
char* Result = DeleD_GetData("<request><primitives subset=\"all\" /></request>");
FILE* hf_log = fopen("plug.log", "w");
fprintf(hf_log, "%s", Result);
fclose(hf_log);
DeleD_FreeData(Result);
}
