srplab Common Language Extension(CLE)
 

Traditional method for java calling c++ usually uses jni interface and CLI. This is little more difficult because programmer have to deal with calling conversion, structed memory conversion, string format conversion, record callback java handle, etc. Using cle developed by srplab, the procedure is simplified. Here is a simple example.A function “Add” is defined in lua which returns the sum of two input integers, the function also call java method “Show” to print the result.

There are three steps:

1.       Init cle, create service group, and create service.

2.       Define extends class of StarObjectClass, and defines a new function “Add” of it.

3.       Create interface object, named “TestClass”.

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using star_csharp;

 

namespace AddFunctionService

{

//--Step2 : Define extends class of StarObjectClass, and defines a new function “Add” of it.

    class MyObjectClass : StarObjectClass

    {

        public int Add(StarObjectClass self, int x, int y)

        {

//--Callback to script function

            self._Call("Show", x + y);

            return x + y;

        }

        public MyObjectClass(StarObjectClass srcobj)

            : base(srcobj)

        {

        }

    }

    class Program

    {

        static void Main (string[] args)

        {

        //--Step1 : Init cle, create service group,import sharelibrary,  and create service

            StarCoreFactory starcore = StarCoreFactory.GetFactory();

            StarServiceClass Service = starcore._InitSimple("AddFunctionService", "123", 0, 0);

              //--Step3 : Create interface object, named “TestClass”.

            MyObjectClass Obj = new MyObjectClass(Service._New("TestClass"));

        }

    }

}

 

For java code calls the above c# file, there are four steps;

1.       Init cle, create service group, import c# file, and create service.

2.       Define extends class of StarObjectClass, which implement callback function “Show”.

3.       Create Instance of object “TestClass” defined in c#.

4.       call function “Add”.

 

import com.srplab.www.starcore.*;

 

//--Step2 : Define extends class of StarObjectClass and implements callback function “Show”.

class MyObjectClass extends StarObjectClass{

   public void Show( StarObjectClass self,int para )

   {

     System.out.println("print from java call back "+para);

     return;

   }

         public MyObjectClass(StarObjectClass srcobj){

                   super(srcobj);

         }     

}

 

public class java_call{

         public static void main(String[] args){

         //--Step1 : Init cle, create service group,import c# file,  and create service

                   StarCoreFactory starcore= StarCoreFactory.GetFactory();

                   StarServiceClass Service=starcore._InitSimple("test","123",0,0,"AddFunctionService.exe?script=csharp");

                   //--Step3 : Create Instance of object “TestClass” defined in c#.

                   MyObjectClass a = new MyObjectClass( Service._GetObject("TestClass")._New() );

                   //--Step4 : call function “Add”.

        System.out.println("Add returns : "+a._Call("Add",12,34));

        starcore._ModuleExit();

    }

} 

examples code download

Copywright (C) 2005 www.SRPLab.com(Star-River Platform Lab.) All Rights Reserved Email:support@srplab.com