• 那些年独自踩过的flascc的坑


    [一个工程中使用多个flascc编译出来的swc]

    1、如果是swf工程, 工程中同时使用多个flascc编译出来的swc, 可以顺利通过。

    2、如果是swc工程, 工程中同时使用多个flascc编译出来的swc,编译报错:

      Error: the script name ABC0 was used multiple times.

    究其原因, 打开一个swc内部的catalog.xml可以看到类似于如下的标签

      <script name="ABC0" mod="1436409992126">

    问题和这个有关, 因为flascc编译出来的swc, script name都是"ABC0".  至于为什么swf能通过, 而swc不行, 暂时还不知道原因。

    解决办法:

    假设是swc_host需要引用flascc编译出来的swc1和swc2,则需要把swc1和swc2的引用方式改为external library, 这样swc_host可以正常编译, 但是不包含所引用的外部库的内容。

    如果某个swf工程需要引用swc_host, 则需要额外引用swc1和swc2。

    [关于swig编译器]

    swig编译器可以方便的把c的接口和类导出为as格式, 但是官方文档明确说明:

    防止按值返回结构和对象的函数的包装器发生内存泄露

    当使用 SWIG 编译器从 C/C++ 头文件创建 SWC 时,请注意以下几点:

    • 默认情况下,按值返回结构和对象的函数的包装器会泄露内存。 SWIG 无法自行了解何时应当释放这些值,因此,我们期望调用包装器的代码能够保证在适当的时间释放返回的值。
    • Flascc 不包含任何 std::string 标准 Typemap,也不包含任何 C++ 标准库类。 正因如此,在包装器中std::string 或相似类的许多应用可能无法按预期正常运行,您将需要编写应用程序特定 Typemap 达成所需的行为。

    特别是标准库的问题, 如果一个类含有标准库相关的变量或接口, 这时候又用swig来导出该类, 这时候行为不确定。 巨大的一个坑, 很不容易发现。

    [关于c++代码输出调试信息]

    要想c++代码利用标准io输出调试信息到as的控制台, 需要在as里即使指定了CModule.vfs.console(ISpecialFile).

    这里有个坑是, 如果一个flascc编译的swc, 这个swc对应的main函数需要按如下格式定义

    int main()
    {
    
    }

    其中main的定义不能带参数, 否则write接口也不会触发。

  • 相关阅读:
    求n的元素的最大最小值
    输出一个集合的所有子集,从长到短
    树的各种操作java
    几个笔试题目总结
    小知识不断补充
    java、C语言实现数组模拟栈
    LearnHowToThink
    Android中的this、Activity、Context等
    Android已上线应用开源分享中(第二季)
    Android已上线应用开源分享中(第一季)
  • 原文地址:https://www.cnblogs.com/zilongblog/p/4633272.html
Copyright © 2020-2023  润新知