Plugin Development in C/C++

From DeleDWiki

Jump to: navigation, search
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);
}
Personal tools