電商網(wǎng)站開發(fā)的流程圖招商外包
今天終于將A_GIMME方法部分的描述看懂了,上周因為太趕時間加上這文檔很抽象一直沒看懂。也就那么一回事,記錄一下。
A_GIMME方法用于接收多個參數(shù)。
①內(nèi)置消息選擇器傳遞多個參數(shù)時一定要使用A_GIMME;
②自定義消息選擇器傳遞多個參數(shù)時建議也使用A_GIMME;
#include "ext.h" // standard Max include, always required
#include "ext_obex.h" // required for new style Max objecttypedef struct _gimme {t_object ob; // the object itself (must be first)/* 自定義屬性 */
} t_gimme;void* gimme_new(t_symbol* s, long argc, t_atom* argv);
void gimme_free(t_gimme* x);
void gimme_assist(t_gimme* x, void* b, long m, long a, char* s);
// 自定義函數(shù)
void gimme_printArgs(t_gimme* x, t_symbol* s, long argc, t_atom* argv);void* gimme_class;void ext_main(void* r) {t_class* c;// "gimme" 建議和項目名一樣,否則在max/msp中創(chuàng)建自定義組件會出問題c = class_new("gimme", (method)gimme_new, (method)gimme_free, (long)sizeof(t_gimme),0L /* leave NULL!! */, A_GIMME, 0);/* you CAN'T call this from the patcher */class_addmethod(c, (method)gimme_assist, "assist", A_CANT, 0);// 注意:這里的"gimme"為自定義的消息選擇器,會被加入消息選擇器表中;而"anything"為消息選擇器表內(nèi)置// 自定義消息選擇器class_addmethod(c, (method)gimme_printArgs, "gimme", A_GIMME, 0); class_register(CLASS_BOX, c); /* CLASS_NOBOX */gimme_class = c;post("I am the gimme object");
}void gimme_assist(t_gimme* x, void* b, long m, long a, char* s) {if (m == ASSIST_INLET) { // inletsprintf(s, "I am inlet %ld", a);} else { // outletsprintf(s, "I am outlet %ld", a);}
}void gimme_free(t_gimme* x) {;
}/* argc指在創(chuàng)建組件時,直接跟在組件后面的參數(shù)個數(shù);argv存儲參數(shù)具體值*/
void* gimme_new(t_symbol* s, long argc, t_atom* argv) {t_gimme* x = NULL;long i;x = (t_gimme*)object_alloc(gimme_class);return (x);
}// 接收多個參數(shù),并打印所有參數(shù)
void gimme_printArgs(t_gimme* x, t_symbol* s, long argc, t_atom* argv) {long i;t_atom* ap = argv;for (int i = 0; i < argc; i++) {switch (atom_gettype(ap)) {case A_LONG:post("arg %ld: %ld", i, atom_getlong(ap));break;case A_FLOAT:post("arg %ld: %lf", i, atom_getfloat(ap));break;case A_SYM:post("arg %ld: %s", i, atom_getsym(ap)->s_name);break;default:post("%ld, unknown atom type: %ld", i, atom_gettype(ap));break;}ap++;}
}
運行結(jié)果: