[一个工程中使用多个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接口也不会触发。