paxCompiler MS VC++. Register host-defined types and variables.


#include "stdafx.h"
#include "paxcompilerlib.h"

struct TMyPoint
{
  long  x;
  long  y;
};

int main(int argc, char* argv[])
{
        HMODULE h_lib = LoadPaxCompilerLib();
        if (h_lib != 0)
        {

		TMyPoint MyPoint;
		MyPoint.x = 60;
		MyPoint.y = 23;

                DWORD hc = PaxCompiler_Create();
                DWORD hl = PaxPascalLanguage_Create();
                DWORD hp = PaxProgram_Create();

                PaxCompiler_Reset(hc);
                PaxCompiler_RegisterLanguage(hc, hl);

		// register host-defined type
		DWORD H_TMyPoint = PaxCompiler_RegisterRecordType(hc, 0, "TMyPoint");
		PaxCompiler_RegisterRecordTypeField(hc, H_TMyPoint, "X", PaxTypeLONG);
		PaxCompiler_RegisterRecordTypeField(hc, H_TMyPoint, "Y", PaxTypeLONG);

		// register host-defined variable
		DWORD H_MyPoint = PaxCompiler_RegisterVariable(hc, 0, "MyPoint", H_TMyPoint);

                PaxCompiler_AddModule(hc, "1", "Pascal");
                PaxCompiler_AddCode(hc, "1", "begin");
                PaxCompiler_AddCode(hc, "1", "  MyPoint.Y := 8;");
                PaxCompiler_AddCode(hc, "1", "end.");

                if (PaxCompiler_Compile(hc, hp))
                {
			// set address of the variable
			PaxProgram_SetAddress(hp, H_MyPoint, &MyPoint);
                        PaxProgram_Run(hp);
			printf("MyPoint.y = %d\n", MyPoint.y);
                }
                else
                {
                        printf("there are errors:\n");
                        for (int i = 0; i < PaxCompiler_GetErrorCount(hc); i++)
                        {
                                printf(PaxCompiler_GetErrorMessage(hc, i));
                        }
                }

                PaxProgram_Destroy(hp);
                PaxPascalLanguage_Destroy(hl);
                PaxCompiler_Destroy(hc);
        }
        FreePaxCompilerLib(h_lib);

        getchar();
        return 0;
}


Copyright © 2006-2017 Alexander Baranovsky. All rights reserved.