Здравствуйте, Сергей Губанов, Вы писали:
СГ>О, кстати, а давайте еще проще! Вот есть DLL в которой есть процедура. Что Вы делаете когда ее динамически загружаете? Как Вы вытаскиваете из DLL процедуру? Правильно, Вы вытаскиваете не саму процедуру, а лишь только получаете ее адрес. Вот Вам и процедурная переменная. То есть без процедурных переменных (указателей на функции), даже DLL динамически загрузить нельзя.
Если мы говорим про ЯВУ, то там это не является обязательным — указатели на функции могут быть скрыты где-то глубоко внутри реализации. Мы просто имеем некий оператор, который сам загружает DLL и получает из нее нужный для НЕГО указатель. А другой оператор использует тот самый указатель, чтобы вызвать функцию и через нее — какой-то метод в модуле.
Именно так сделано в вышеупомянутом COM. Клиентскому коду знать что-либо о DllGetClassObject просто не нужно.
Надеюсь, мне не нужно рассказывать — что такое отделение интерфейса от реализации и зачем это нужно?