Uruchomienie fukcji z adresu.

0

Jak uruchomić w C++ funkcję mając prototyp i jej adres?

1

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

0

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 :)...

1

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...

1 użytkowników online, w tym zalogowanych: 0, gości: 1