Monday, June 8, 2009

Alchemy Tutorial : Sending data to Alchemy and back

Following up on my previous post on getting started with Alchemy, today, we're going to see how to send a variable from Flex to a C method as arguments. In this example, we're just going to pass an integer from Flex to a C function which will return the square of the integer value. Ok, lets get to the code.
The C code : square.c

#include "AS3.h"

static AS3_Val sqre( void* self, AS3_Val num )
{
int a;
a = AS3_IntValue(num);
int square = a*a;
return AS3_Int(square);
}

int main()
{
AS3_Val cMethod = AS3_Function( NULL, sqre );
AS3_Val result = AS3_Object( "sqre : AS3ValType" , cMethod);
AS3_Release( cMethod );
AS3_LibInit( result );
return 0;
}
As you can see, the main function is still pretty much the same. When passing arguments to a C method, that method should always return an AS3_Val object and always accept a pointer in addition to the other parameter.The rest of the code is very simple.
Compile the C code into a swc using
gcc square.c -O3 -Wall -swc -o square.swc
Now, we create an ActionScript project in Flex and import the swc. Type the following code :


package {
import flash.display.Sprite;
import cmodule.square.CLibInit;

public class Squaring extends Sprite
{
public function Squaring()
{
var loader:CLibInit = new CLibInit;
var lib:Object = loader.init();
trace(lib.sqre(5));//Output : 25
}
}
}

Now save and debug. You should get the output as 25. Now that we know how to send and receive data from Alchemy and Flex, we can move on to some real world applications.Hope this post was useful. Happy experimenting :D

No comments:

Post a Comment