LINUX.ORG.RU

Динамическая загрузка классов.


0

0

В win есть механизм позволяющий динамически загружать классы из dll (к примеру, лежащих в текущей директории), причем даже если программа об этих классах ничего не знает. Есть ли чего-нибудь подобное в Linux или вообще unix'о подобных системах. P.S. IMHO это вроде линковки из .so функции с неизвестным прототипом.


Посмотри man load. Там описана такая загрузка на уровне команд системы (не на уровне ф-ций С). Я сейчас тоже ищу инфу по такой загрузке динамических либ. Если что - дам знать.

Akan
()

2Aleks IZA: Нет, мне это не подходит.
Требуется обеспечить гибкость и наращиваемость приложения.
Для этого в win существует механизм (описан здесь
http://www.microsoft.com/msj/defaultframe.asp?page=/msj/0797/dynamic.htm&...) динамической загрузки неизвестных классов из dll (неизвестных в том смысле что неизвестно его имя и свойства), после загрузки можно передать управление обьекту этого класса. Требуется понять есть ли что-нибудь подобное под Linux.

fire
() автор топика

Можно, но плохо переносимо. Неизвестных имен быть не может, можно сделать специальную функцию в подгружаемой библиотеке, которая будет перечислять заргужаемые классы. Посмотри здесь http://freshmeat.net/projects/dlc/ и тут http://freshmeat.net/projects/openclasses/

anonymous
()

Да по Вашей ссылке выходит, что не такие уж они и неизвестные - они должны наследоваться от определенного класса. Можно конечно написать лоадер для "неизвестных классов", но это будет непортабельно, да и не к чему это (IMHO), т.к. имена символов это compile time информация (при правильной проектировке). Для плагинов вполне хватает dlopen etc. - с их помощью можно вытащить функции и данные (объект так просто, конечно, не вытащишь). Вобщем man dlopen, dlclose, dlsym etc.

timur
()

2anonymous: По двум линкам ничего полезного нашел
(по обоим не могу скачать source). :-(((
У тебя случаем нет идей как реализовать такую функцию.

2timur: Я не такой уж большой спец в Linux и тем более в win, но
в моем понимании неизвестные классы - классы информацию, о которых основное приложение не имеет на момент старта. На сколько я понял из статьи в каждой отдельной dll должна быть своя функция ClassInfo, при вызове которая возвращает информацию о хранящихся классов, после чего
можно создавать объекты этого класса.

fire
() автор топика
Ответ на: комментарий от fire

Действительно, OpenClasses не скачивается. С DLC проблем нет. Релизовать можно при помощи dlopen, dlsym и dlclose. Сделать в подгружаемой библиотеке функцию, которая бы конструировала и возвращала нужные классы. В свое время мне очень помог man dlopen.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.