將C++編譯為Flash可用的swc

wangdai發表於2019-05-10

下載crossbridge編譯器套件

注意作業系統是Windows
這個編譯器本來是adobe公司開發的,叫flascc,後來adobe將其開源,叫crossbridge
再後來adobe放棄了對它的維護,現在由社群進行維護,還叫crossbridge
我使用的是adobe手上的最後一個版本,crossbridge 1.0.1
github地址
下載地址,下載那個zip包就好了
社群維護的crossbridge的github地址,僅供參考

安裝其他依賴

接下來的步驟我是參考adobe flascc的幫助文件

  • 安裝64位的Java,不能是32位的,Java7或Java8都可以
  • 下載flex sdk 4.6或以上,這個連結是4.6的(FlashBuilder中應該帶有flex sdk,如果有就不必再下載)
  • 下載debug版本的flash player(當你需要用gdb除錯程式時才需要)

啟動crossbridge的Cygwin環境

解壓crossbridge的zip包,雙擊其中的run.bat,就能啟動了
預設是在sample目錄下的,你可以進入其中某個sample編譯執行了

shellcd 01_HelloWorld
make FLASCC=/cygdrive/c/flascc/sdk FLEX=/cygdrive/c/flex_sdk

編譯為swc

我們可以參考sample目錄中的05_SWC
需要寫一個wrapper,參考我寫的
AS3/AS3.h中的api可參考這個

#include <cstdlib>
#include <string>
#include "AS3/AS3.h"
#include "AES.h"

void encrypt() __attribute__((used,
    annotate("as3sig:public function encrypt(text:String):String"),
    annotate("as3package:com.qunhe.instdeco.diy.flashutil.aes")));

void encrypt()
{
    char *cstr = NULL;
    AS3_MallocString(cstr, text);
    int len = strlen(cstr);
    std::string str(cstr, cstr+len);
    free(cstr);

    std::string enc = AES::encrypt(str);

    AS3_DeclareVar(result, String);
    AS3_CopyCStringToVar(result, enc.c_str(), enc.length());
    AS3_ReturnAS3Var(result);
}

void decrypt() __attribute__((used,
    annotate("as3sig:public function decrypt(text:String):String"),
    annotate("as3package:com.qunhe.instdeco.diy.flashutil.aes")));

void decrypt()
{
    char *cstr = NULL;
    AS3_MallocString(cstr, text);
    int len = strlen(cstr);
    std::string str(cstr, cstr+len);
    free(cstr);

    std::string dec = AES::decrypt(str);

    AS3_DeclareVar(result, String);
    AS3_CopyCStringToVar(result, dec.c_str(), dec.length());
    AS3_ReturnAS3Var(result);
}

相關文章