//#########################
//AUTHOR OF DLL: Utermiko #
//#########################

#define EXPORT extern "C" __declspec(dllexport)
#define CALLING_CONVENTION __stdcall

EXPORT int CALLING_CONVENTION LoadDll(char* path);
EXPORT int CALLING_CONVENTION CreateObject(int assemblyId, char* namespaceAndClass);
EXPORT int CALLING_CONVENTION RemoveObject(int objectId);

EXPORT int CALLING_CONVENTION ClearArguments();
EXPORT int CALLING_CONVENTION AddStringArgument(char* value);//System.String
EXPORT int CALLING_CONVENTION AddCharArgument(char value);//System.SByte
EXPORT int CALLING_CONVENTION AddUCharArgument(unsigned char value);//System.Byte
EXPORT int CALLING_CONVENTION AddDoubleArgument(double value);//System.Double
EXPORT int CALLING_CONVENTION AddFloatArgument(float value);//System.Float
EXPORT int CALLING_CONVENTION AddIntArgument(int value);//System.Int32
EXPORT int CALLING_CONVENTION AddUIntArgument(unsigned int value);//System.UInt32
EXPORT int CALLING_CONVENTION AddShortArgument(short value);//System.Int16
EXPORT int CALLING_CONVENTION AddUShortArgument(unsigned short value);//System.UInt16
EXPORT int CALLING_CONVENTION AddLongArgument(long value);//System.Int64
EXPORT int CALLING_CONVENTION AddULongArgument(unsigned long value);//System.UInt64
EXPORT int CALLING_CONVENTION AddLPVOIDArgument(LPVOID value);//System.IntPtr

EXPORT char* CALLING_CONVENTION InvokeStringMethod(int objectId, char* methodName); //System.String
EXPORT char CALLING_CONVENTION InvokeCharMethod(int objectId, char* methodName); //System.SByte
EXPORT unsigned char CALLING_CONVENTION InvokeUCharMethod(int objectId, char* methodName); //System.Byte
EXPORT double CALLING_CONVENTION InvokeDoubleMethod(int objectId, char* methodName); //System.Double
EXPORT float CALLING_CONVENTION InvokeFloatMethod(int objectId, char* methodName); //System.Float
EXPORT int CALLING_CONVENTION InvokeIntMethod(int objectId, char* methodName); //System.Int32
EXPORT unsigned int CALLING_CONVENTION InvokeUIntMethod(int objectId, char* methodName); //System.UInt32
EXPORT short CALLING_CONVENTION InvokeShortMethod(int objectId, char* methodName); //System.Int16
EXPORT unsigned short CALLING_CONVENTION InvokeUShortMethod(int objectId, char* methodName); //System.UInt16
EXPORT long CALLING_CONVENTION InvokeLongMethod(int objectId, char* methodName); //System.Int64
EXPORT unsigned long CALLING_CONVENTION InvokeULongMethod(int objectId, char* methodName); //System.UInt64
EXPORT LPVOID CALLING_CONVENTION InvokeLPVOIDMethod(int objectId, char* methodName); //System.IntPtr

////// AsCharPtr functions

EXPORT char* CALLING_CONVENTION LoadDllAsCharPtr(char* path)
EXPORT char* CALLING_CONVENTION CreateObjectAsCharPtr(char* assemblyId, char* namespaceAndClass)
EXPORT char* CALLING_CONVENTION RemoveObjectAsCharPtr(char* objectId)

EXPORT char* CALLING_CONVENTION ClearArgumentsAsCharPtr()
EXPORT char* CALLING_CONVENTION AddStringArgumentAsCharPtr(char* value)
EXPORT char* CALLING_CONVENTION AddCharArgumentAsCharPtr(char* value)
EXPORT char* CALLING_CONVENTION AddUCharArgumentAsCharPtr(char* value)
EXPORT char* CALLING_CONVENTION AddDoubleArgumentAsCharPtr(char* value)
EXPORT char* CALLING_CONVENTION AddFloatArgumentAsCharPtr(char* value)
EXPORT char* CALLING_CONVENTION AddIntArgumentAsCharPtr(char* value)
EXPORT char* CALLING_CONVENTION AddUIntArgumentAsCharPtr(char* value)
EXPORT char* CALLING_CONVENTION AddShortArgumentAsCharPtr(char* value)
EXPORT char* CALLING_CONVENTION AddUShortArgumentAsCharPtr(char* value)
EXPORT char* CALLING_CONVENTION AddLongArgumentAsCharPtr(char* value)
EXPORT char* CALLING_CONVENTION AddULongArgumentAsCharPtr(char* value)
EXPORT char* CALLING_CONVENTION AddLPVOIDArgumentAsCharPtr(LPVOID value)

EXPORT char* CALLING_CONVENTION InvokeStringMethodAsCharPtr(char* objectId, char* methodName)
EXPORT char* CALLING_CONVENTION InvokeCharMethodAsCharPtr(char* objectId, char* methodName)
EXPORT char* CALLING_CONVENTION InvokeUCharMethodAsCharPtr(char* objectId, char* methodName)
EXPORT char* CALLING_CONVENTION InvokeDoubleMethodAsCharPtr(char* objectId, char* methodName)
EXPORT char* CALLING_CONVENTION InvokeFloatMethodAsCharPtr(char* objectId, char* methodName)
EXPORT char* CALLING_CONVENTION InvokeIntMethodAsCharPtr(char* objectId, char* methodName)
EXPORT char* CALLING_CONVENTION InvokeUIntMethodAsCharPtr(char* objectId, char* methodName)
EXPORT char* CALLING_CONVENTION InvokeShortMethodAsCharPtr(char* objectId, char* methodName)
EXPORT char* CALLING_CONVENTION InvokeUShortMethodAsCharPtr(char* objectId, char* methodName)
EXPORT char* CALLING_CONVENTION InvokeLongMethodAsCharPtr(char* objectId, char* methodName)
EXPORT char* CALLING_CONVENTION InvokeULongMethodAsCharPtr(char* objectId, char* methodName)
EXPORT LPVOID CALLING_CONVENTION InvokeLPVOIDMethodAsCharPtr(char* objectId, char* methodName)