本文整理汇总了C++中call_pv函数的典型用法代码示例。如果您正苦于以下问题:C++ call_pv函数的具体用法?C++ call_pv怎么用?C++ call_pv使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了call_pv函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: run_start_sub
static void run_start_sub(void)
{
dSP; /* access to Perl stack */
PUSHMARK(SP);
if (get_cv("main::trace_begin", 0))
call_pv("main::trace_begin", G_DISCARD | G_NOARGS);
}
开发者ID:KaZoom,项目名称:buildroot-linux-kernel-m3,代码行数:8,代码来源:trace-event-perl.c
示例2: DoDump
void DoDump(SV *dumpme) {
dSP;
PUSHMARK(SP);
XPUSHs(dumpme);
PUTBACK;
call_pv("Devel::Peek::Dump", G_DISCARD);
}
开发者ID:simcop2387,项目名称:Text-Upskirt,代码行数:9,代码来源:dump.c
示例3: do_script_hook_quit
static inline void
do_script_hook_quit(void)
{
dSP;
PUSHMARK(SP);
call_pv("quit_hook", G_EVAL | G_DISCARD | G_NOARGS);
}
开发者ID:rkd77,项目名称:elinks-tv,代码行数:9,代码来源:hooks.c
示例4: RPerl_object_property_init
// NEED ANSWER: what in the hades does this property init function even do? why do we need it???
void RPerl_object_property_init(SV* initee)
{
dSP;
PUSHMARK(SP);
XPUSHs(initee);
PUTBACK;
call_pv("Dumper", G_SCALAR);
printf("in HelperFunctions::RPerl_object_property_init(), have initee->flags =\n0x%x\n", initee->sv_flags);
}
开发者ID:nsnake,项目名称:rperl,代码行数:10,代码来源:HelperFunctions.cpp
示例5: fd_cb
static int
fd_cb (int fd, int flags, void *userdata)
{
HookData *data = (HookData *) userdata;
int retVal = 0;
int count = 0;
dSP;
ENTER;
SAVETMPS;
PUSHMARK (SP);
XPUSHs (data->userdata);
PUTBACK;
set_current_package (data->package);
count = call_sv (data->callback, G_EVAL);
set_current_package (&PL_sv_undef);
SPAGAIN;
if (SvTRUE (ERRSV)) {
hexchat_printf (ph, "Error in fd callback %s", SvPV_nolen (ERRSV));
if (!SvOK (POPs)) {} /* remove undef from the top of the stack */
retVal = HEXCHAT_EAT_ALL;
} else {
if (count != 1) {
hexchat_print (ph, "Fd handler should only return 1 value.");
retVal = HEXCHAT_EAT_NONE;
} else {
retVal = POPi;
if (retVal == 0) {
/* if 0 is returned, the fd is going to get unhooked */
PUSHMARK (SP);
XPUSHs (sv_2mortal (newSViv (PTR2IV (data->hook))));
PUTBACK;
call_pv ("Xchat::unhook", G_EVAL);
SPAGAIN;
SvREFCNT_dec (data->callback);
if (data->userdata) {
SvREFCNT_dec (data->userdata);
}
free (data);
}
}
}
PUTBACK;
FREETMPS;
LEAVE;
return retVal;
}
开发者ID:Farow,项目名称:hexchat,代码行数:56,代码来源:perl.c
示例6: execute_perl
int execute_perl( const char *function, char **args, char *data ) {
int count = 0, i, ret_value = 1;
STRLEN na;
SV *sv_args[0];
dSP;
PERL_SET_CONTEXT( my_perl );
/*
* Set up the perl environment, push arguments onto the perl stack, then
* call the given function
*/
SPAGAIN;
ENTER;
SAVETMPS;
PUSHMARK( sp );
for ( i = 0; i < ( int )sizeof( args ) - 1; i++ ) {
if ( args[i] != NULL ) {
sv_args[i] = sv_2mortal( newSVpv( args[i], 0 ) );
XPUSHs( sv_args[i] );
}
}
PUTBACK;
PERL_SET_CONTEXT( my_perl );
count = call_pv( function, G_EVAL | G_SCALAR );
SPAGAIN;
/*
* Check for "die," make sure we have 1 argument, and set our return value
*/
if ( SvTRUE( ERRSV ) ) {
sprintf( data,
"%sPerl function (%s) exited abnormally: %s",
( loaded ? "ERR " : "" ), function, SvPV( ERRSV, na ) );
( void )POPs;
}
else if ( count != 1 ) {
/*
* This should NEVER happen. G_SCALAR ensures that we WILL have 1
* parameter
*/
sprintf( data,
"%sPerl error executing '%s': expected 1 return value; received %s",
( loaded ? "ERR " : "" ), function, count );
}
else {
sprintf( data, "%s%s", ( loaded ? "OK " : "" ), POPpx );
}
/* Check for changed arguments */
for ( i = 0; i < ( int )sizeof( args ) - 1; i++ ) {
if ( args[i] && strcmp( args[i], SvPVX( sv_args[i] ) ) ) {
args[i] = strdup( SvPV( sv_args[i], na ) );
}
}
PUTBACK;
FREETMPS;
LEAVE;
return ret_value;
}
开发者ID:sanko,项目名称:perl4mirc,代码行数:56,代码来源:perl4mirc.c
示例7: forward
static void
forward(pTHX_ const char *function)
{
dXSARGS;
DWORD err = GetLastError();
Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, newSVpvn("Win32",5), newSVnv(0.27));
SetLastError(err);
SPAGAIN;
PUSHMARK(SP-items);
call_pv(function, GIMME_V);
}
开发者ID:gitpan,项目名称:kurila,代码行数:11,代码来源:Win32CORE.c
示例8: timer_cb
static int
timer_cb (void *userdata)
{
HookData *data = (HookData *) userdata;
int retVal = 0;
int count = 0;
dSP;
ENTER;
SAVETMPS;
PUSHMARK (SP);
XPUSHs (data->userdata);
PUTBACK;
if (data->ctx) {
xchat_set_context (ph, data->ctx);
}
set_current_package (data->package);
count = call_sv (data->callback, G_EVAL);
set_current_package (&PL_sv_undef);
SPAGAIN;
if (SvTRUE (ERRSV)) {
xchat_printf (ph, "Error in timer callback %s", SvPV_nolen (ERRSV));
if (!SvOK (POPs)) {} /* remove undef from the top of the stack */
retVal = XCHAT_EAT_ALL;
} else {
if (count != 1) {
xchat_print (ph, "Timer handler should only return 1 value.");
retVal = XCHAT_EAT_NONE;
} else {
retVal = POPi;
if (retVal == 0) {
/* if 0 is return the timer is going to get unhooked */
PUSHMARK (SP);
XPUSHs (sv_2mortal (newSViv (PTR2IV (data->hook))));
XPUSHs (sv_mortalcopy (data->package));
PUTBACK;
call_pv ("Xchat::unhook", G_EVAL);
SPAGAIN;
}
}
}
PUTBACK;
FREETMPS;
LEAVE;
return retVal;
}
开发者ID:JordanKinsley,项目名称:hexchat,代码行数:54,代码来源:perl.c
示例9: DBG
void IvrPython::onDTMFEvent(int detectedKey) {
dtmfKey.set(detectedKey); // wake up waiting functions...
if (onDTMFCallback == NULL) {
DBG("IvrPython::onDTMFEvent, but script did not set onDTMF callback!\n");
return;
}
DBG("IvrPython::onDTMFEvent(): calling onDTMFCallback key is %d...\n", detectedKey);
#ifndef IVR_PERL
PyThreadState *tstate;
/* interp is your reference to an interpreter object. */
tstate = PyThreadState_New(mainInterpreterThreadState->interp);
PyEval_AcquireThread(tstate);
/* Perform Python actions here. */
PyObject *arglist = Py_BuildValue("(i)", detectedKey);
PyObject *result = PyEval_CallObject(onDTMFCallback, arglist);
Py_DECREF(arglist);
if (result == NULL) {
DBG("Calling IVR" SCRIPT_TYPE "onDTMF failed.\n");
PyErr_Print();
//return ;
} else {
Py_DECREF(result);
}
/* Release the thread. No Python API allowed beyond this point. */
PyEval_ReleaseThread(tstate);
/* You can either delete the thread state, or save it
until you need it the next time. */
PyThreadState_Delete(tstate);
#else //IVR_PERL
DBG("IvrPython::onDTMFEvent(): calling onDTMFCallback func is %s...\n", onDTMFCallback);
PERL_SET_CONTEXT(my_perl_interp);
DBG("context is %ld\n", (long) Perl_get_context());
dSP ;
ENTER ;
SAVETMPS ;
PUSHMARK(SP) ;
XPUSHs(sv_2mortal(newSViv(detectedKey)));
PUTBACK ;
call_pv(onDTMFCallback, G_DISCARD);
FREETMPS ;
LEAVE ;
#endif //IVR_PERL
DBG("IvrPython::onDTMFEvent done...\n");
}
开发者ID:BackupTheBerlios,项目名称:semsivr,代码行数:52,代码来源:IvrPython.cpp
示例10: purple_perl_plugin_actions
GList *
purple_perl_plugin_actions(PurplePlugin *plugin, gpointer context)
{
GList *l = NULL;
PurplePerlScript *gps;
int i = 0, count = 0;
dSP;
gps = plugin->info->extra_info;
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(purple_perl_bless_object(plugin, "Purple::Plugin")));
/* XXX This *will* cease working correctly if context gets changed to
* ever be able to hold anything other than a PurpleConnection */
if (context != NULL)
XPUSHs(sv_2mortal(purple_perl_bless_object(context,
"Purple::Connection")));
else
XPUSHs(&PL_sv_undef);
PUTBACK;
count = call_pv(gps->plugin_action_sub, G_EVAL | G_ARRAY);
SPAGAIN;
if (SvTRUE(ERRSV)) {
purple_debug_error("perl",
"Perl plugin actions lookup exited abnormally: %s\n",
SvPVutf8_nolen(ERRSV));
}
if (count == 0)
croak("The plugin_actions sub didn't return anything.\n");
for (i = 0; i < count; i++) {
SV *sv;
PurplePluginAction *act;
sv = POPs;
act = purple_plugin_action_new(SvPVutf8_nolen(sv), purple_perl_plugin_action_cb);
l = g_list_prepend(l, act);
}
PUTBACK;
FREETMPS;
LEAVE;
return l;
}
开发者ID:bf4,项目名称:pidgin-mac,代码行数:52,代码来源:perl-handlers.c
示例11: perl_stop_script
/*
* Stop trace script
*/
static int perl_stop_script(void)
{
dSP; /* access to Perl stack */
PUSHMARK(SP);
if (get_cv("main::trace_end", 0))
call_pv("main::trace_end", G_DISCARD | G_NOARGS);
perl_destruct(my_perl);
perl_free(my_perl);
return 0;
}
开发者ID:020gzh,项目名称:linux,代码行数:16,代码来源:trace-event-perl.c
示例12: catch
void Embperl::dosub(const char * subname, const std::vector<std::string> * args, int mode)
{//as seen in perlembed docs
#if EQDEBUG >= 5
if(InUse()) {
LogFile->write(EQCLog::Debug, "Warning: Perl dosub called for %s when perl is allready in use.\n", subname);
}
#endif
in_use = true;
bool err = false;
try {
SV **sp = PL_stack_sp;
/* initialize stack pointer */
} catch(const char *err)
{//this should never happen, so if it does, it is something really serious (like a bad perl install), so we'll shutdown.
EQC::Common::Log(EQCLog::Error,CP_ZONESERVER, "Fatal error initializing perl: %s", err);
}
dSP;
ENTER; /* everything created after here */
SAVETMPS; /* ...is a temporary variable. */
PUSHMARK(SP); /* remember the stack pointer */
if(args && args->size())
{
for(std::vector<std::string>::const_iterator i = args->begin(); i != args->end(); ++i)
{/* push the arguments onto the perl stack */
XPUSHs(sv_2mortal(newSVpv(i->c_str(), i->length())));
}
}
PUTBACK; /* make local stack pointer global */
int result = call_pv(subname, mode); /*eval our code*/
SPAGAIN; /* refresh stack pointer */
//if(SvTRUE(ERRSV))
//{
// err = true;
//}
FREETMPS; /* free temp values */
LEAVE; /* ...and the XPUSHed "mortal" args.*/
in_use = false;
if(err)
{
errmsg = "Perl runtime error: ";
errmsg += SvPVX(ERRSV);
throw errmsg.c_str();
}
}
开发者ID:Kielkenny,项目名称:OpenEQC-Legacy,代码行数:51,代码来源:embperl.cpp
示例13: PUSHMARK
int Embperl::dosub(const char * subname, const std::vector<std::string> * args, int mode)
{
dSP;
int ret_value = 0;
int count;
std::string error;
ENTER;
SAVETMPS;
PUSHMARK(SP);
if(args && args->size())
{
for(std::vector<std::string>::const_iterator i = args->begin(); i != args->end(); ++i)
{
XPUSHs(sv_2mortal(newSVpv(i->c_str(), i->length())));
}
}
PUTBACK;
count = call_pv(subname, mode);
SPAGAIN;
if(SvTRUE(ERRSV))
{
error = SvPV_nolen(ERRSV);
POPs;
}
else
{
if(count == 1) {
SV *ret = POPs;
if(SvTYPE(ret) == SVt_IV) {
IV v = SvIV(ret);
ret_value = v;
}
PUTBACK;
}
}
FREETMPS;
LEAVE;
if(error.length() > 0)
{
std::string errmsg = "Perl runtime error: ";
errmsg += SvPVX(ERRSV);
throw errmsg.c_str();
}
return ret_value;
}
开发者ID:Kiddinglife,项目名称:Server,代码行数:51,代码来源:embperl.cpp
示例14: lucy_Err_do_throw
void
lucy_Err_do_throw(lucy_Err *err) {
dSP;
SV *error_sv = (SV*)Lucy_Err_To_Host(err);
CFISH_DECREF(err);
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(error_sv));
PUTBACK;
call_pv("Clownfish::Err::do_throw", G_DISCARD);
FREETMPS;
LEAVE;
}
开发者ID:pavansondur,项目名称:lucy,代码行数:14,代码来源:Err.c
示例15: perl_embed_run
/**
* file_path - full path to perl file to load
* func_name - function to run within loaded file
* func_params - hashref to send to function
* obj_name - class name, when run_func is a class method (NULL if not used)
* obj_attr - hashref obj_name is blessed with (NULL if not used)
*/
int perl_embed_run(char *file_path, char *func_name, HV *func_params, char *obj_name, HV *obj_attr, char *error, int errorlength) {
dSP;
ENTER;
SAVETMPS;
PUSHMARK(SP);
//filnavnet
XPUSHs(sv_2mortal(newSVpv(file_path, 0) ));
//mappen, for å inkludere
//XPUSHs(sv_2mortal(newSVpv(collection->crawlLibInfo->resourcepath, 0) ));
XPUSHs(sv_2mortal(newSViv(perl_opt_cache)));
XPUSHs(sv_2mortal(newSVpv(func_name, 0)));
XPUSHs(sv_2mortal(newRV((SV *) func_params)));
if (obj_name != NULL)
XPUSHs(sv_2mortal(newSVpv(obj_name, 0)));
if (obj_attr != NULL)
XPUSHs(sv_2mortal(newRV((SV *) obj_attr)));
PUTBACK;
int retn = call_pv("Embed::Persistent::eval_file2", G_SCALAR | G_EVAL);
//antar at rutiner som ikke returnerer noe mislykkes. Dette kan for eks skje hvis vi kaller die, eller ikke trenger retur koden
int retv = 0;
SPAGAIN; //refresh stack pointer
if (SvTRUE(ERRSV)) {
fprintf(stderr, "Perl preprocessor error: %s\n", SvPV_nolen(ERRSV));
// overfører error beskjeden.
if (errorlength != 0) {
snprintf(error,errorlength,SvPV_nolen(ERRSV));
}
retv = -1;
}
else if (retn == 1) {
//pop the return value, as a int
retv = POPi;
}
else {
fprintf(stderr, "perlfunc returned %i values, expected 0 or 1. Ignored.\n", retn);
}
FREETMPS;
LEAVE;
printf("~perl_embed_run=%i\n",retv);
return retv;
}
开发者ID:dateline,项目名称:enterprise-search,代码行数:57,代码来源:perlembed.c
示例16: __LogAnswer
static void __LogAnswer(
const char *msg,
unsigned append)
{
dSP;
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(newSVpv(msg, 0)));
XPUSHs(sv_2mortal(newSViv(append)));
PUTBACK;
call_pv("LogAnswer", G_DISCARD);
FREETMPS;
LEAVE;
}
开发者ID:HITliuyu,项目名称:NES15_HEVC,代码行数:15,代码来源:perl_bindings.c
示例17: ffi_pl_closure_add_data
void
ffi_pl_closure_add_data(SV *closure, ffi_pl_closure *closure_data)
{
dSP;
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(closure);
XPUSHs(sv_2mortal(newSViv(PTR2IV(closure_data))));
XPUSHs(sv_2mortal(newSViv(PTR2IV(closure_data->type))));
PUTBACK;
call_pv("FFI::Platypus::Closure::add_data", G_DISCARD);
FREETMPS;
LEAVE;
}
开发者ID:cjac,项目名称:libffi-platypus-perl,代码行数:15,代码来源:closure.c
示例18: call_dump_perl
static
void call_dump_perl(void *sv) {
dSP;
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(newSVsv((SV *)sv)));
PUTBACK;
call_pv("dump_perl", G_DISCARD);
FREETMPS;
LEAVE;
}
开发者ID:krunt,项目名称:projects,代码行数:16,代码来源:8.c
示例19: call_helper
static void
call_helper(AV *resobj, int cbtype, const lcb_RESPBASE *resp)
{
dSP;
const char *methname;
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(newRV_inc((SV*)resobj)));
if (cbtype == LCB_CALLBACK_STATS) {
const lcb_RESPSTATS *sresp = (const void *)resp;
/** Call as statshelper($doc,$server,$key,$value); */
XPUSHs(sv_2mortal(newSVpv(sresp->server, 0)));
XPUSHs(sv_2mortal(newSVpvn(sresp->key, sresp->nkey)));
if (sresp->value) {
XPUSHs(sv_2mortal(newSVpvn(sresp->value, sresp->nvalue)));
}
methname = PLCB_STATS_PLHELPER;
} else if (cbtype == LCB_CALLBACK_OBSERVE) {
const lcb_RESPOBSERVE *oresp = (const void *)resp;
/** Call as obshelper($doc,$status,$cas,$ismaster) */
XPUSHs(sv_2mortal(newSVuv(oresp->status)));
XPUSHs(sv_2mortal(plcb_sv_from_u64_new(&oresp->cas)));
XPUSHs(oresp->ismaster ? &PL_sv_yes : &PL_sv_no);
methname = PLCB_OBS_PLHELPER;
} else {
return;
}
PUTBACK;
call_pv(methname, G_DISCARD|G_EVAL);
SPAGAIN;
if (SvTRUE(ERRSV)) {
warn("Got error in %s: %s", methname, SvPV_nolen(ERRSV));
}
FREETMPS;
LEAVE;
}
开发者ID:benvanstaveren,项目名称:perl-Couchbase-Client,代码行数:47,代码来源:callbacks.c
示例20: call_perl_function_args
static GnmValue*
call_perl_function_args (GnmFuncEvalInfo *ei, GnmValue const * const *args)
{
GnmFunc *fndef;
gint min_n_args, max_n_args, n_args;
gint i;
gchar *perl_func;
GnmValue* result;
dSP;
fndef = gnm_expr_get_func_def ((GnmExpr *)(ei->func_call));
perl_func = g_strconcat ("func_", gnm_func_get_name (fndef, FALSE), NULL);
gnm_func_count_args (fndef, &min_n_args, &max_n_args);
for (n_args = min_n_args; n_args < max_n_args && args[n_args] != NULL; n_args++);
ENTER;
SAVETMPS;
PUSHMARK(SP);
for (i = 0; i < n_args; i++) {
SV* sv = value2perl (args[i]);
XPUSHs(sv_2mortal(sv));
}
PUTBACK;
call_pv (perl_func, G_EVAL | G_SCALAR);
SPAGAIN;
if (SvTRUE(ERRSV)) { /* Error handling */
gchar *errmsg;
STRLEN n_a;
errmsg = g_strconcat (_("Perl error: "), SvPV (ERRSV, n_a), NULL);
POPs;
result = value_new_error (ei->pos, errmsg);
g_free (errmsg);
} else {
result = perl2value (POPs);
}
PUTBACK;
FREETMPS;
LEAVE;
g_free (perl_func);
return result;
}
开发者ID:GNOME,项目名称:gnumeric,代码行数:47,代码来源:perl-loader.c
注:本文中的call_pv函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论