Озадачился тут вопросом. Как происходит вызов внешних функций из виртуальной машины Java или C# или ещё чего то.
Ситуация мне видится так.
При инициализаци виртуальной машины и передачи байткода в неё происходит инициализация некоторой таблицы внешних функций, состоящей из указателя на функцию общего вида типа:
typedef void (*lpfn_general)(void);
и какого то описателя. Описывающего к какому виду эту функцию нужно привести внтури кода виртуальной машины выполняющей вызов внешней функции.
Остается непонятно одно, как это привидение в виртуальной машины происходит?
Если например описатель функции будет некий enum типа такого который используется в MFC в картах сообщений. Т.е.
enum fn_type {
fnt_Rv_Pv //void (*fn)(void)
,fnt_Rv_Pi //void (*fn)(int)
,fnt_Ri_Pui //int (*fn)(unsigned int)
};
то это приведёт к тому что мы упрёмся в невозможность описать все возможные варианты и понтяно что это решение тупиковое. Как же тогда записывается описатель функции и происходит привидение в динамике, если конечно я правильно представил что вызов таких функций происходит через таблицы?
Спасибо.