/*dumb marshalling hack */ static void matecomponent_activation_registration_iterate (const MateComponentActivationBaseService *base_service, CORBA_Object obj, CORBA_Environment *ev, gulong offset, int nargs) { GSList *link; char *ior = NULL; if (nargs == 4) ior = CORBA_ORB_object_to_string (matecomponent_activation_orb_get (), obj, ev); for (link = registries; link; link = link->next) { RegistryInfo *ri; void (*func_ptr) (); ri = link->data; func_ptr = *(gpointer *) ((guchar *) ri->registry + offset); if (!func_ptr) continue; switch (nargs) { case 4: func_ptr (ri->registry, ior, base_service, ri->user_data); break; case 2: func_ptr (ri->registry, ri->user_data); break; } } if (nargs == 4) CORBA_free (ior); }
int main() { int a; int* b = &a; int** c = &b; int*** d = &c; func_ptr(b); func_ptr(*c); func_ptr(**d); func_ref(*b); func_ref(**c); func_ref(***d); }
/* Helper function to traverse the entire splaytree */ static inline void splay_traverse_helper (void (*func_ptr)(), splaynode_t * splaynode) { /* Normal if this happens, its a base case of recursion */ if (splaynode == NULL) return; /* Recursively traverse to the left */ splay_traverse_helper(func_ptr, splaynode->left); /* Node is a of regular type, so its ok to perform the function on it */ if (splaynode->type == REGULAR_NODE_TYPE) func_ptr(splaynode->data); /* Node is of symbolic link type, do nothing */ else if (splaynode->type == SYMBOLIC_NODE_TYPE) ; /* Unknown node type */ else ; /* Recursively traverse to the right */ splay_traverse_helper(func_ptr, splaynode->right); /* Done */ return; }
/*FUNCTION*------------------------------------------------------------------- * * Function Name : _io_mputc * Returned Value : _mqx_int number_of_character_printed_out * Comments : * This function outputs given character count times. * * NOTE: I/O is performed by calling given function pointer using following * (*func_ptr)(c,farg); * *END*----------------------------------------------------------------------*/ static _mqx_int _io_mputc( /* [IN] Argument to func_ptr */ MQX_FILE_PTR farg, /* [IN] Function to put character out */ _mqx_int (_CODE_PTR_ func_ptr)(_mqx_int, MQX_FILE_PTR), /* [IN] The character to put out */ char c, /* Number of character prints out */ _mqx_int count ) { int_32 cnt = 0; if (count < 0) { count = 0; } for (; (cnt < count) ; cnt++) { if (c != func_ptr((_mqx_int) c, farg)) { break; } } return cnt; }
void ndsloadstub() { void (*func_ptr)(void) = (void*)ARM9STUBVMA; #ifndef BOOTHB swiDecompressLZSSWram((void*)ndsloader_lz, (void*)BOOTLDR_NDS); *((u32*)(BOOTLDR_NDS-8)) = *((u32*)ndsloader_lz) >> 8; #endif DC_FlushAll(); DC_InvalidateAll(); IC_InvalidateAll(); BOOTFLAG = 0; VRAM_C_CR = VRAM_ENABLE | VRAM_C_LCD; #ifndef BOOTHB NDSHEADER->arm7executeAddress = 0x06000000; #endif memcpy16((void*)ARM9STUBVMA, arm9stub_bin, arm9stub_bin_size); memcpy16(VRAM_C, arm7stub_bin, arm7stub_bin_size); VRAM_C_CR = VRAM_ENABLE | VRAM_C_ARM7_0x06000000; DC_FlushAll(); DC_InvalidateAll(); IC_InvalidateAll(); #ifdef BOOTHB resetARM7(0x06000000); #endif func_ptr(); }
inline Binder<FunctionPtr<RT,P1,P2,P3>, PNum, BoundVal<typename FunctorParam<FunctionPtr<RT,P1,P2,P3>, PNum >::Type > > bindfp (RT (*fp)(P1,P2,P3), typename ForwardParamT<typename FunctorParam<FunctionPtr<RT,P1,P2,P3>, PNum >::Type >::Type val) { return Binder<FunctionPtr<RT,P1,P2,P3>, PNum, BoundVal<typename FunctorParam<FunctionPtr<RT,P1,P2,P3>, PNum >::Type> >(func_ptr(fp), BoundVal<typename FunctorParam <FunctionPtr<RT,P1,P2,P3>, PNum >::Type >(val)); }
int main( int argc, char **argv ) { ip2region_entry ip2rEntry; datablock_entry datablock; char *dbFile = NULL, *algorithm = NULL; char line[256]; uint_t (*func_ptr)(ip2region_t, char *, datablock_t); double s_time, c_time; memset(&datablock, 0x00, sizeof(datablock_entry)); if ( argc < 2 ) { printf("Usage: a.out [ip2region db file path] [algorithm]"); return 0; } dbFile = argv[1]; algorithm = "B-tree"; func_ptr = ip2region_btree_search_string; if ( argc >= 3 && strcmp(argv[2], "binary") == 0 ) { algorithm = "Binary"; func_ptr = ip2region_binary_search_string; } //create a new ip2rObj printf("+--initializing %s ... \n", algorithm); if ( ip2region_create(&ip2rEntry, dbFile) == 0 ) { println("Error: Fail to create the ip2region object"); return 0; } __PRINT_ABOUT__; while ( 1 ) { print("ip2region>> "); getLine( stdin, line ); if ( strlen(line) < 2 ) continue; if ( strcasecmp( line, "quit" ) == 0 ) { println("+--Bye!"); break; } s_time = getTime(); func_ptr(&ip2rEntry, line, &datablock); c_time = getTime() - s_time; printf("%d|%s in %.5f millseconds\n", datablock.city_id, datablock.region, c_time); } //destory the ip2rObj ip2region_destroy(&ip2rEntry); return 0; }
int main(int argc, char **argv) { typedef std::vector<void (*)(int, int)> container; container vec; vec.push_back(print_plus); vec.push_back(print_minus); vec.push_back(print_times); vec.push_back(print_divide); for (container::iterator i = vec.begin(), e = vec.end(); i < e; i++) func_ptr(*i, 100, 20); return 0; }
int advanced_search(int *arr, int n, int (*func_ptr)(int)) { int i; for (i = 0; i < n; i++) { if (func_ptr(arr[i])) return 1; } return -1; }
int main(){ func(); //注意是函数名,不带小括号的这种方式 printf("func:%p &func:%p\n",func,&func); //有地址说明是占内存的 //定义一个指针变量指向函数 //第一个void是返回值类型,第二个void是参数 void(*func_ptr)(void) = func; //直接用函数就调用了 func_ptr(); return 0; }
/*FUNCTION*------------------------------------------------------------------- * * Function Name : _io_putstr * Returned Value : _mqx_int number_of_character_printed_out * Comments : * This function outputs given string. * * NOTE: I/O is performed by calling given function pointer using following * (*func_ptr)(c,farg); * *END*----------------------------------------------------------------------*/ static _mqx_int _io_putstr( /* [IN] Argument to func_ptr */ MQX_FILE_PTR farg, /* [IN] Function to put character out */ _mqx_int (_CODE_PTR_ func_ptr)(_mqx_int, MQX_FILE_PTR), /* [IN] The string to put out */ char_ptr str ) { _mqx_int res = 0; for ( ; *str && ((_mqx_int) *str == func_ptr((_mqx_int) *str, farg)); res++, str++) {} if (*str) { res--; } return res; }
int main(int argc, char **argv) { GridTable<HtmlRenderer> gt; test_func_2 func_ptr = reinterpret_cast<test_func_2>(test_); func_ptr(4,5); call(increase); // inline_call(); return 0; gt.print(); gt.set(0,0,"abc"); gt.print(); gt.set(0,0,"name"); gt.set(1,0,"tel"); gt.set(2,0,"addr"); gt.print(); gt.set(0,0,"no"); gt.set(1,0,"name"); gt.set(2,0,"tel"); gt.set(3,0,"addr"); gt.print(); gt.set(0, 1, 1); gt.set(1, 1, "Younwoo"); gt.set(2, 1, "010-2565-3903"); gt.set(3, 1, "Ahnyang"); gt.print(); gt.set(0, 2, 1); gt.set(1, 2, "Younwoo"); gt.set(2, 2, "010-2565-3903"); gt.set(3, 2, "Ahnyang"); gt.set_bar(1); gt.set(1, 3, "[ ]"); gt.print(); return 0; }
LST_EXPORT LIST * ListSort( LIST ** list, PFI func_ptr ) { LIST **parent_a; LIST **parent_b; for( parent_a = list; *parent_a; parent_a = &(*parent_a) -> next ) { for( parent_b = &(*parent_a) -> next; *parent_b; parent_b = &(*parent_b) -> next ) { if( func_ptr(*parent_a, *parent_b) > 0 ) { LIST *swap_a, *swap_a_child; LIST *swap_b, *swap_b_child; swap_a = *parent_a; swap_a_child = (*parent_a) -> next; swap_b = *parent_b; swap_b_child = (*parent_b) -> next; (*parent_a) -> next = swap_b_child; (*parent_a) = swap_b; if( swap_b == swap_a_child ) { (*parent_a) -> next = swap_a; parent_b = &(*parent_a) -> next; } else { (*parent_b) -> next = swap_a_child; (*parent_b) = swap_a; } } } } return( *list ); }
int main (void) { print_var (); printf ("We see var = %d\n", var); printf ("Setting var = 456\n"); var = 456; print_var (); printf ("We see var = %d\n\n", var); var = 90; print_var (); printf ("We see var = %d\n\n", var); print_foo (); printf ("We see foo = %d\n", foo); printf ("Setting foo = 19\n"); foo = 19; print_foo (); printf ("We see foo = %d\n\n", foo); fflush (stdout); printf ("Calling dllimported function pointer\n"); func_ptr (); printf ("Calling functions using global structure\n"); xyz.func_ptr (); * xyz.var = 40; xyz.func_ptr (); printf ("We see var2[0] = %d\n\n", var2[0]); printf ("We see const xyz %x %x\n", const_xyz.var, const_xyz.var_with_offset); return 0; }
BOOL CImageUtility::GetDisplayMonitorICC( wchar_t* full_path, int char_count ) { if( !IS_Vista_Or_More() ) return FALSE; DISPLAY_DEVICE device_info; device_info.cb = sizeof( DISPLAY_DEVICE ); int card_id=0; while( TRUE ) { BOOL ret = EnumDisplayDevices( NULL, card_id, &device_info, 0 ); if( !ret ) break; if(device_info.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP ) { int monitor_id=0; wchar_t card_name[256]; ::memcpy( card_name,device_info.DeviceName,32*2); ret = EnumDisplayDevices( card_name, monitor_id, &device_info, 0 ); if( !ret ) return FALSE; DWORD buf_size = char_count*2; ret = GetColorDirectory( NULL, full_path, &buf_size ); if( !ret ) return FALSE; if( char_count*2 < buf_size+10 ) return FALSE; full_path[buf_size/2-1] = L'\\'; WcsGetDefaultColorProfileType func_ptr = GetProfileFunctionAddress(); if( func_ptr == NULL ) return FALSE; ret = func_ptr(WCS_PROFILE_MANAGEMENT_SCOPE_CURRENT_USER,device_info.DeviceID,CPT_ICC, CPST_NONE, 0, char_count*2 - buf_size, full_path + buf_size/2 ); return ret; } ++card_id; } return FALSE; }
static size_t my_get_system_windows_directory(char *buffer, size_t size) { size_t count; GET_SYSTEM_WINDOWS_DIRECTORY func_ptr= (GET_SYSTEM_WINDOWS_DIRECTORY) GetProcAddress(GetModuleHandle("kernel32.dll"), "GetSystemWindowsDirectoryA"); if (func_ptr) return func_ptr(buffer, (uint) size); /* Windows NT 4.0 Terminal Server Edition: To retrieve the shared Windows directory, call GetSystemDirectory and trim the "System32" element from the end of the returned path. */ count= GetSystemDirectory(buffer, (uint) size); if (count > 8 && stricmp(buffer+(count-8), "\\System32") == 0) { count-= 8; buffer[count] = '\0'; } return count; }
int main( int argc, char* argv[] ) { if( argc < 2) { printf("Usage: %s <a number 1 - 20>\n", argv[0]); printf("Use %s help or %s -h for more help\n", argv[0], argv[0]); exit(0); } srand(time(NULL)); func_ptr = game; printf("--DEBUG---\n"); printf("[before strcpy] funct_ptr @ %p: %p\n", &func_ptr, func_ptr); strcpy( buffer, argv[1]); printf("[*] buffer @ %p: %s\n", buffer, buffer); printf("[after strcpy] funct_ptr @ %p: %p\n", &func_ptr, func_ptr); func_ptr( atoi( buffer) ); }
cmr_int cmr_sns_ioctl(struct sensor_drv_context *sensor_cxt, cmr_uint cmd, cmr_uint arg) { SENSOR_IOCTL_FUNC_PTR func_ptr; SENSOR_IOCTL_FUNC_TAB_T *func_tab_ptr; cmr_uint temp; cmr_u32 ret = CMR_CAMERA_SUCCESS; cmr_u32 sns_cmd = SENSOR_IOCTL_GET_STATUS; ret = cmr_sns_get_ioctl_cmd(&sns_cmd, cmd); if (ret) { CMR_LOGE("can't get correct command !\n"); return CMR_CAMERA_INVALID_PARAM; } if (SENSOR_IOCTL_GET_STATUS != sns_cmd) { CMR_LOGI("cmd = %d, arg = 0x%lx.\n", sns_cmd, arg); } SENSOR_DRV_CHECK_ZERO(sensor_cxt); if (!sensor_is_init_common(sensor_cxt)) { CMR_LOGE("sensor has not init.\n"); return SENSOR_OP_STATUS_ERR; } if (SENSOR_IOCTL_CUS_FUNC_1 > sns_cmd) { CMR_LOGW("can't access internal command !\n"); return SENSOR_SUCCESS; } if (PNULL == sensor_cxt->sensor_info_ptr) { CMR_LOGE("No sensor info!"); return -1; } func_tab_ptr = sensor_cxt->sensor_info_ptr->ioctl_func_tab_ptr; #ifdef __LP64__ temp = *(cmr_uint *) ((cmr_uint) func_tab_ptr + sns_cmd * S_BIT_3); #else temp = *(cmr_uint *) ((cmr_uint) func_tab_ptr + sns_cmd * S_BIT_2); #endif func_ptr = (SENSOR_IOCTL_FUNC_PTR) temp; #if (CONFIG_READOTP_METHOD != 0) if( SENSOR_ACCESS_VAL == cmd) { SENSOR_VAL_T *val = (SENSOR_VAL_T *)arg; if(val->type == SENSOR_VAL_TYPE_READ_OTP) { SENSOR_OTP_PARAM_T *param_ptr = (SENSOR_OTP_PARAM_T *)val->pval; CMR_LOGD("SENSOR_IO_READ_OTPDATA %p, %d", param_ptr, param_ptr->type); ret = ioctl(sensor_cxt->fd_sensor, SENSOR_IO_READ_OTPDATA, param_ptr); if(!ret && param_ptr->type == SENSOR_OTP_PARAM_NORMAL) { val->type = SENSOR_VAL_TYPE_PARSE_OTP; ret = func_ptr(arg); } return ret; } } #endif if (PNULL != func_ptr) { ret = func_ptr(arg); } return ret; }
Object_ptr unCalcedData::calc() { return func_ptr(getObject(basefunction)).inputArgument(lst); }
int main() { bool result = bind<1>(func_ptr(func), "Comparing")(1.0, 2.0); std::cout << "bound function returned " << result << '\n'; }
int main() { std::cout << "compute (20+7)*2: " << compose(func_ptr(add),func_ptr(twice))(20,7) << '\n'; }