/*	
	File: ModuleIface.h
	Author: yoszik
	Description: class CalcControl provide interface to interrupt CALCFUNC function from external program
	
	To create new module:
	
		#define MODULE_EXPORTS
		#include "ModuleIface.h"
		extern "C"{ 
				MODULE_API int calcfunc(const char* inputDataStr, CalcControl* control)
				{ 
					//Place your calculation code here
						// "inputDataStr" variable contains input data string.
						// "control"- call "control->isInterrupted()" to check if it needs to stop calculations.
						// 	      "control->setResult() to return result after calculation.
					
				}
		}

*/

#ifndef MODULE_IFACE_H
#define MODULE_IFACE_H
#define OUTPUTBUF_SIZE 500

class CalcControl
{
public:
virtual bool isInterrupted()=0; //function to check if calculation need be interrupted
virtual int setResult(const char* result) = 0;
};

typedef int (*CALCFUNC)(const char*,CalcControl*);

#ifdef MODULE_EXPORTS
#define MODULE_API __declspec(dllexport)
/////////////////////////////////// platform specific dll main functions////////////////
#ifdef WIN32
#include <windows.h>
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
					 )
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:		
		break;
	case DLL_THREAD_ATTACH:
		break;
	case DLL_THREAD_DETACH:
		break;
	case DLL_PROCESS_DETACH:
		break;
	}
	return TRUE;
}
#endif
//////////////////////////////////////////////////////////////////////////////////////////
#else
#define MODULE_API __declspec(dllimport)
extern "C"{ MODULE_API int calcfunc(const char* inputDataStr, CalcControl* control);}
#endif

#endif

