宏的定义:
vlc_module_begin ()
set_description( N_("HTTP stream output") )
set_capability( "sout access", 0 )
set_shortname( "HTTP" )
add_shortcut( "http", "https", "mmsh" )
set_category( CAT_SOUT )
set_subcategory( SUBCAT_SOUT_ACO )
add_string( SOUT_CFG_PREFIX "user", "",
USER_TEXT, USER_LONGTEXT, true )
add_password( SOUT_CFG_PREFIX "pwd", "",
PASS_TEXT, PASS_LONGTEXT, true )
add_string( SOUT_CFG_PREFIX "mime", "",
MIME_TEXT, MIME_LONGTEXT, true )
add_bool( SOUT_CFG_PREFIX "metacube", false,
METACUBE_TEXT, METACUBE_LONGTEXT, true )
set_callbacks( Open, Close )
vlc_module_end ()
宏展开后:展开方式,VS中属性-〉C/C++/预处理器:预处理到文件 选择 是 编译后在相应的工程文件目录下有*.i文件,从中可取出以下宏的展开部分。例子里是VLC2.2.6
plugins/access_output/access_output_http.c
__declspec(dllexport) int __cdecl vlc_entry__2_2_0b (vs_cb vs, void *op) {
module_t *module; module_cf_t *cf = ((void *)0);
if (vs (op, ((void *)0), VLC_MODULE_CREATE, &module)) goto error;
if (vs (op, module, VLC_MODULE_NAME, ("access_output_http"))) goto error;
if (vs (op, module, VLC_MODULE_DESCRIPTION, (("HTTP stream output")))) goto error;
if (vs (op, module, VLC_MODULE_CAPABILITY, ("sout access")) || vs (op, module, VLC_MODULE_SCORE, (int)(0))) goto error;
if (vs (op, module, VLC_MODULE_SHORTNAME, ("HTTP"))) goto error;
const char *shortcuts[] = { "http", "https", "mmsh" };
if (vs (op, module, VLC_MODULE_SHORTCUT, sizeof(shortcuts)/sizeof(shortcuts[0]), shortcuts)) goto error;
vs (op, ((void *)0), VLC_CONFIG_CREATE, (0x06) CONFIG_CATEGORY, &cf);
vs (op, cf, VLC_CONFIG_VALUE, (int64_t)(5) CAT_SOUT);
vs (op, ((void *)0), VLC_CONFIG_CREATE, (0x07) CONFIG_SUBCATEGORY, &cf);
vs (op, cf, VLC_CONFIG_VALUE, (int64_t)(504) SUBCAT_SOUT_ACO);
vs (op, ((void *)0), VLC_CONFIG_CREATE, (0x80) CONFIG_ITEM_STRING, &cf);
vs (op, cf, VLC_CONFIG_DESC, (("Username")), (("User name memo.")));if (1) vs (op, cf, VLC_CONFIG_ADVANCED);
vs (op, cf, VLC_CONFIG_NAME, ("sout-http-user"));vs (op, cf, VLC_CONFIG_VALUE, (""));
vs (op, ((void *)0), VLC_CONFIG_CREATE, (0x81) CONFIG_ITEM_PASSWORD, &cf);
vs (op, cf, VLC_CONFIG_DESC, (("Password")), (("Password memo.")));if (1) vs (op, cf, VLC_CONFIG_ADVANCED);
vs (op, cf, VLC_CONFIG_NAME, ("sout-http-pwd"));vs (op, cf, VLC_CONFIG_VALUE, (""));
vs (op, ((void *)0), VLC_CONFIG_CREATE, (0x80) CONFIG_ITEM_STRING, &cf);
vs (op, cf, VLC_CONFIG_DESC, (("Mime")), (("MIME memo.")));if (1) vs (op, cf, VLC_CONFIG_ADVANCED);
vs (op, cf, VLC_CONFIG_NAME, ("sout-http-mime"));vs (op, cf, VLC_CONFIG_VALUE, (""));
vs (op, ((void *)0), VLC_CONFIG_CREATE, (0x60) CONFIG_ITEM_BOOL, &cf);
vs (op, cf, VLC_CONFIG_DESC, (("Metacube")), (("Metacube memo.")));if (1) vs (op, cf, VLC_CONFIG_ADVANCED);
vs (op, cf, VLC_CONFIG_NAME, ("sout-http-metacube"));if (0) vs (op, cf, VLC_CONFIG_VALUE, (int64_t)1);
if (vs (op, module, VLC_MODULE_CB_OPEN, Open) || vs (op, module, VLC_MODULE_CB_CLOSE, Close)) goto error;
return 0;
error: return -1;
}