Jak uruchomić w C++ funkcję mając prototyp i jej adres?
void *ad <=- tu masz adres funkcji (w typie void zeby utrudnic sprawe)
int FUNKCJA( float a, int b ) <=- a taka ma definicje
dwa kroki: konwersja void* do int(*)(float,int)
i odpalenie funkcji
(ofc w tym wypadku nie robi roznicy czy ad to jest void* czy int czy stala)
ret = ((int(*)(float,int))ad)( 1.23f, 1234 );
tyo np bedzie jej wywolanie
sprawa sie upraszcza jesli masz np
int (*ad)(float, int) <=- czyli Od razu pointer do funkcji w odpowiednim typie
wtedy ad uzywasz jak normalnej funkcji
ret = ad( 1.23f, 1234 );
ciekawostka:
mozesz tez zrobic
ret = **************************ad(1.23f, 1234);
obojetnie ile *, w tym wypadku sa ignorowane ;>>>
pokoj, Gynv
Hmm skro masz prototyp i adres to wystarczy zrobic np:
void (*funkcja)() = NULL;
i w programie przypisac jej adres funkcji w pamieci i normalnie wywolywac:
funkcja();
Ale ostrzegam ze takie wywolywanie jest scisle związane z systemem operacyjnym na korym siedzisz i nie wszystko jest mozliwe :)...
Ale ostrzegam ze takie wywolywanie jest scisle związane z systemem operacyjnym na korym siedzisz i nie wszystko jest mozliwe :)...
huh? to nie jest bardziej z systemem zwiazane niz zwykle wywolanie funkcji
o ile w zwyklym wywolaniu masz np
push 2
push 1
call add_func
to tu masz
mov eax, add_func
...
push 2
push 1
call eax
prawie zadnej roznicy...