2011-04-23 2 views
0

Je peux modifier et compiler l'exemple stringecho.c du SDK pour l'utilisation AS3 pas de problème.Flash Alchemy construit bibliothèque .swc trop petit et les fonctions manquantes

Pour ma propre application, je compilez avec g ++ quelques dizaines de fichiers avec succès et lien:

g++ -swc -o myApp.swc glue.o demo.o obj1.o obj2.o obj3.o 

je reçois un myApp.swc, mais il est à tort que 80k (même taille que simple exemple stringecho) .

Examinés dans un IDE flash, contrairement à la stringecho.swc qui a

cmodule.stringecho.AlchemyBlock 
cmodule.stringecho.AlchemyBreakPoint 
... 

Ce myApp.swc a

cmodule.AlchemyBlock 
cmodule.AlchemyBreakPoint 
... 

Et n'a pas de fonction de la colle je définissais. En substance, je ne peux pas l'utiliser dans un projet AS3.

Mon code de colle.c est ci-dessous. Fondamentalement, je crée un objet de démonstration et appelle ses fonctions. La classe démo encapsule tous les autres fichiers objets.

#include "demo.h" 
#include "AS3.h" 
    AS3_Val InitSystem(void* self, AS3_Val args) 
    { 
     demo = new demo9(); 
     return 0; 
    } 

    AS3_Val LoadSceneFile(void* self, AS3_Val args) 
    { 
     demo->loadScene("scene.txt"); 
     return 0; 
    } 

... 

    int main() 
    { 
     AS3_Val InitSystemMethod = AS3_Function(NULL, InitSystem); 
     AS3_Val LoadSceneFileMethod = AS3_Function(NULL, LoadSceneFile); 
     AS3_Val getAlchemyScreenMethod = AS3_Function(NULL, getAlchemyScreen); 
     AS3_Val setMouseStateMethod = AS3_Function(NULL, setMouseState); 
     AS3_Val rasterizeMethod = AS3_Function(NULL, rasterize); 

     AS3_Val result = AS3_Object("InitSystem: AS3ValType,LoadSceneFile: AS3ValType,getAlchemyScreen:AS3ValType,setMouseState:AS3ValType,rasterize:AS3ValType" 
            ,InitSystemMethod, 
            LoadSceneFileMethod, 
            getAlchemyScreenMethod, 
            setMouseStateMethod, 
            rasterizeMethod); 

     AS3_Release(InitSystemMethod); 
     AS3_Release(LoadSceneFileMethod); 
     AS3_Release(getAlchemyScreenMethod); 
     AS3_Release(setMouseStateMethod); 
     AS3_Release(rasterizeMethod); 

     AS3_LibInit(result); 

     return 0; 
    } 

Répondre

1

Lisez ceci blog post. L'histoire courte est que la liaison de beaucoup de fichiers .o ne fonctionnera pas. Vous devez les "ar" ensemble dans un fichier de bibliothèque (.a). Ensuite, vous compilez votre code de colle contre cette bibliothèque. Par exemple, ce serait quelque chose comme ceci:

ar rc mylib.a demo.o obj1.o obj2.o obj3.o 
ranlib mylib.a 
g++ -swc -o myApp.swc glue.c mylib.a 
+0

cela vous at-il été utile? Si oui, veuillez accepter ma réponse comme réponse – paleozogt

Questions connexes