2010-09-13 5 views
2

J'essaye d'employer AS3_Shim dans mon code d'alchimie mais cela ne semble pas fonctionner. Il retourne toujours un pointeur de fonction NULL. Il ne semble pas y avoir d'exemples d'utilisation de AS3_Shim, donc je ne suis pas sûr de ce que je fais mal. Voici quelques exemples de code:AS3_Shim d'Alchemy cassé?

static AS3_Val thunk_logtest(void *self, AS3_Val args) { 

    // warning: this leaks 
    AS3_Val ns= AS3_String("mx.logging"); 
    AS3_Val clazz= AS3_NSGetS(ns, "Log"); 
    AS3_Val logger= AS3_CallTS("getLogger", clazz, "StrType", "alchemy"); 

    // works 
    AS3_Val logret= AS3_CallTS("debug", logger, "StrType", "this is a test"); 

    // doesn't work: AS3_Shim returns NULL! 
    typedef void (*log_func_t)(const char[], ...); 
    log_func_t log_func= (log_func_t)AS3_Shim(AS3_String("debug"), logger, "VoidType", "StrType", true); 
    printf("log_func= %d \n", log_func); fflush(stdout); 

    // because log_func is NULL, this throws TypeError: Error #1006: value is not a function 
    log_func("this is a test"); 

    return AS3_Undefined(); 
} 

Répondre

1

AS3_Shim attend une fonction pour son premier paramètre, et non pas un nom de fonction. Remplacer AS3_String("debug") avec AS3_GetS(logger, "debug")

log_func_t log_func = (log_func_t)AS3_Shim(
    AS3_GetS(logger, "debug"), logger, "VoidType", "StrType", true); 
+0

ohhhhhh ... Il a été très clair à partir de la documentation ce qu'ils voulaient dire. Je n'ai pas réalisé que vous pouviez utiliser AS3_Get pour obtenir une fonction (je pensais que c'était juste pour les propriétés). Merci! – paleozogt

+0

@paleo: Vous pouvez également l'utiliser pour accéder aux éléments du tableau en envoyant l'index souhaité sous forme de chaîne. – Gunslinger47