首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用FlasCC将ByteArray传递给C代码

如何使用FlasCC将ByteArray传递给C代码
EN

Stack Overflow用户
提问于 2013-01-15 05:17:48
回答 3查看 2.3K关注 0票数 3

我想把ActionScript中的ByteArray传递给C函数。

基本上我想做这样的事情:

代码语言:javascript
复制
void init() __attribute__((used,annotate("as3sig:public function init(byteData: ByteArray):int"),
        annotate("as3package:example")));

void init()
{
   //here I want to pass byteArray data to C variable.
   //similar to AS3_GetScalarFromVar(cVar, asVar) 
}

不幸的是,我在flascc文档中找不到任何函数来帮助我做到这一点。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-21 07:33:18

示例:

代码语言:javascript
复制
void _init_c(void) __attribute((used,
    annotate("as3sig:public function init(byteData:ByteArray) : void"),
    annotate("as3import:flash.utils.ByteArray")));

void _init_c()
{
    char *byteArray_c;
    unsigned int len;

    inline_as3("%0 = byteData.bytesAvailable;" : "=r"(len));
    byteArray_c = (char *)malloc(len);

    inline_as3("CModule.ram.position = %0;" : : "r"(byteArray_c));
    inline_as3("byteData.readBytes(CModule.ram);");

    // Now byteArray_c points to a copy of the data from byteData.
    // Note that byteData.position has changed to the end of the stream.

    // ... do stuff ...

    free(byteArray_c);
}

这里的关键是C中的堆在AS3端公开为CModule.ram,这是一个ByteArray对象。

在C中被恶意锁定的指针在AS3中被视为到CModule.ram的偏移量。

票数 4
EN

Stack Overflow用户

发布于 2013-01-27 18:39:13

您应该使用CModule.malloc和CModule.writeBytes方法以C风格的方式操作指针。看一看$FLASCC/samples/06_SWIG/PassingData/PassData.as

票数 2
EN

Stack Overflow用户

发布于 2016-06-12 10:55:51

代码语言:javascript
复制
void _init_c(void) __attribute((used,
    annotate("as3sig:public function init(byteData:ByteArray) : void"),
    annotate("as3import:flash.utils.ByteArray")));

void _init_c()
{
    char *byteArray_c;
    unsigned int len;

    inline_as3("%0 = byteData.bytesAvailable;" : "=r"(len));
    byteArray_c = (char *) malloc(len);

    inline_as3("byteData.readBytes(CModule.ram, %0, %1);" : : "r"(byteArray_c), "r"(len));

    // Now byteArray_c points to a copy of the data from byteData.
    // Note that byteData.position has changed to the end of the stream.

    // ... do stuff ...

    free(byteArray_c);
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14326828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档