Вызов внешних функций из виртуальной машины
От: nen777w  
Дата: 15.12.08 13:32
Оценка:
Озадачился тут вопросом. Как происходит вызов внешних функций из виртуальной машины 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)
};


то это приведёт к тому что мы упрёмся в невозможность описать все возможные варианты и понтяно что это решение тупиковое. Как же тогда записывается описатель функции и происходит привидение в динамике, если конечно я правильно представил что вызов таких функций происходит через таблицы?

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.