actionscript与c/c++交互的简单编程实例
什么都不说了,直接上源码,alchemy的使用直接参考官方文档
1. 声明一个头文件myutil.h,内容如下:
#ifndef MYUTIL_H
#define MYUTIL_H
#include"AS3.h"
namespace myworld{
class IO
{
public:
static AS3_Val _ByteArray_cls;
static AS3_Val _nsName;
static AS3_Val _clsName;
static AS3_Val _empty_Array;
public:
static AS3_Val getByteArrayCls();
static AS3_Val getEmptyArrayObj();
};
}
#endif
2. 头文件myutil.h的实现文件,内容如下:
#include"myutil.h"
namespace myworld{
AS3_Val IO::_nsName = NULL;
AS3_Val IO::_clsName = NULL;
AS3_Val IO::_ByteArray_cls = NULL;
AS3_Val IO::_empty_Array = NULL;
AS3_Val IO::getByteArrayCls()
{
if (_ByteArray_cls == NULL)
{
/*
*对_ByteArray_cls的赋值,获取flash.utils.ByteArray,这里略去,不懂的朋友可以私下联系
*/
}
return _ByteArray_cls;
}
AS3_Val IO::getEmptyArrayObj()
{
if (_empty_Array == NULL){
/*
*对_empty_Array的赋值,获取flash.utils.ByteArray,这里略去,不懂的朋友可以私下联系
*/
}
return _empty_Array;
}
}
3. 声明一个头文件myarray.h,内容如下:
#ifndef MYARRAY_H
#define MYARRAY_H
int writeHeader(char* header,int length);
#endif
4. 头文件myarray.h的实现文件,内容如下:
#include"myarray.h"
#include<string.h>
int writeHeader(char* header,int length){
char* str = "helloworld";
int size = strlen(str);
int i = 0;
for(i=0;i<size;i++){
*(header+i) = *(str+i);
}
return size;
}
5. Main.cpp函数的实现,内容如下:
#include"myarray.h"
#include"myarray.cpp"
#include"myutil.h"
#include"myutil.cpp"
#include"AS3.h"
#include<stdio.h>
AS3_Val getEaacHeader(void *data, AS3_Val args)
{
char cppFlvHeader[128];
int cppFlvHeaderLen = writeHeader(cppFlvHeader, 128);
AS3_Val asFlvHeader = AS3_New(myworld::IO::getByteArrayCls(),myworld::IO::getEmptyArrayObj());
char *tmpCppFlvHeader = reinterpret_cast<char *>(cppFlvHeader);
AS3_ByteArray_writeBytes(asFlvHeader, static_cast<void*>(tmpCppFlvHeader), cppFlvHeaderLen);
return asFlvHeader;
}
int main(){
AS3_Val getEaacHeaderFun = AS3_Function(NULL, getEaacHeader);
AS3_Val _API = AS3_Object("getEaacHeader: AS3ValType",getEaacHeaderFun);
AS3_Release(getEaacHeaderFun);
AS3_LibInit(_API);
return 0;
}
6. 将这些文件放在同一个目录,用alchemy编译,命令如下:
alc-on;g++ main.cpp –O3 –Wall –swc –o main.swc;alc-off
7. 在flex builder中调用,如下:
import cmodule.awu.CLibInit;
import flash.utils.ByteArray;
public static const _lib_init:cmodule.main.CLibInit =new cmodule.main.CLibInit();
public static const cModuleApi:* = _lib_init.init();
public static function getEaacHeader():ByteArray {
return cModuleApi.getEaacHeader();
}
PS:初写文章,文笔生涩之处,各位请见谅,若有疑问或者交流的,可加本人YY号:301558660
转载请注明出处:山水间博客,http://blog.csdn.net/linyanwen99/article/details/7466128
更多推荐
所有评论(0)