//******************************************************
// hqlplugins.hpp : Defines standard values included
in
// the plugin header file.
//******************************************************
#ifndef __HQLPLUGIN_INCL
#define __HQLPLUGIN_INCL
#define PLUGIN_VERSION 1
#define PLUGIN_IMPLICIT_MODULE 1
#define PLUGIN_MODEL_MODULE 2
#define PLUGIN_.SO_MODULE 4
struct ECLPluginDefinitionBlock
{
size_t size;
unsigned magicVersion;
const char *moduleName;
const char *ECL;
const char *Hole;
unsigned flags;
const char *version;
const char *description;
};
typedef bool (*EclPluginDefinition) (ECLPluginDefinitionBlock *);
#endif //__HQLPLUGIN_INCL
//******************************************************
// examplelib.hpp : Defines standard values included in
// the plugin code file.
//******************************************************
#ifndef EXAMPLELIB_INCL
#define EXAMPLELIB_INCL
#ifdef _WIN32
#define EXAMPLELIB_CALL __cdecl
#ifdef EXAMPLELIB_EXPORTS
#define EXAMPLELIB_API __declspec(dllexport)
#else
#define EXAMPLELIB_API __declspec(dllimport)
#endif
#else
#define EXAMPLELIB_CALL
#define EXAMPLELIB_API
#endif
#include "hqlplugins.hpp"
extern "C" {
EXAMPLELIB_API bool getECLPluginDefinition(ECLPluginDefinitionBlock *pb);
EXAMPLELIB_API void setPluginContext(IPluginContext * _ctx);
EXAMPLELIB_API unsigned EXAMPLELIB_CALL elStringFind(unsigned srcLen,
const char * src, unsigned hitLen, const char * hit,
unsigned instance);
}
#endif //EXAMPLELIB_INCL
//******************************************************
// examplelib.cpp : Defines the plugin code.
//******************************************************
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "examplelib.hpp"
#define EXAMPLELIB_VERSION "EXAMPLELIB 1.0.00"
static const char * HoleDefinition = NULL;
static const char * EclDefinition =
"export ExampleLib := SERVICE\n"
" string EchoString(const string src) : c, pure,fold,entrypoint='elEchoString'; \n"
"END;";
EXAMPLELIB_API bool getECLPluginDefinition(ECLPluginDefinitionBlock *pb)
{
// Warning: This function may be called without the plugin being loaded fully.
// It should not make any library calls or assume that dependent modules
// have been loaded or that it has been initialised.
//
// Specifically: "The system does not call DllMain for process and thread
// initialization and termination. Also, the system does not load
// additional executable modules that are referenced by the specified module."
if (pb->size != sizeof(ECLPluginDefinitionBlock))
return false;
pb->magicVersion = PLUGIN_VERSION;
pb->version = EXAMPLELIB_VERSION " $Revision: 62376 $";
pb->moduleName = "lib_examplelib";
pb->ECL = EclDefinition;
pb->Hole = HoleDefinition;
pb->flags = PLUGIN_IMPLICIT_MODULE;
pb->description = "ExampleLib example services library";
return true;
}
namespace nsExamplelib {
IPluginContext * parentCtx = NULL;
}
using namespace nsExamplelib;
EXAMPLELIB_API void setPluginContext(IPluginContext * _ctx) { parentCtx = _ctx; }
//-------------------------------------------------------------------------------------------------------------------------------------------
EXAMPLELIB_API unsigned EXAMPLELIB_CALL elStringFind(unsigned srcLen,
const char * src, unsigned hitLen, const char * hit,
unsigned instance)
{
tgt = (char *)CTXMALLOC(parentCtx, srcLen);
memcpy(tgt,src,srcLen);
tgtLen = srcLen;
}