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