Форум программистов, компьютерный форум CyberForum.ru

Теория плагинов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ ./massdown: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./massdown) http://www.cyberforum.ru/cpp/thread98890.html
всем хай! собираю свою программу на новом железе х86_64 долго не получалось скомпилить. при линковке получал вот такое сообщение: relocation R_X86_64_32 against `a local symbol' я так понял, это из-за того что часть библиотек от которых зависит цель, были собраны как 32-ух битные. но с этим вроде все нормально, пересобрал все либы - скомпилировалось. теперь при запуске получаю такое...
C++ Как понять этот константный указатель? В общем, имеется класс Cat. Объект класса - SimpleCat. И имеется функция с константым указателем: const SimpleCat* const FunctionTwo(const SimpleCat* const theCat) Что обозначают все эти const? Насколько я понимаю: 1. Константный указатель. 2. Может ссылаться только на FunctionTwo 3. Ничего не изменяет в объекте. 4. Ничего не делает с объектом theCat. http://www.cyberforum.ru/cpp/thread82125.html
C++ Перехват и подмена вызываемых функций
Здравствуйте. Нужно подменить вызов таких функций как open(), lstat(), stat(), read(), write(), mkdir(), chdir(), getcwd() для определенного процесса. Интересует мнение других. Как бы вы реализовали эту задачу. Спасибо!
 

Показать сообщение отдельно
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16946 / 5351 / 329
Регистрация: 30.03.2009
Сообщений: 14,389
Записей в блоге: 26
13.03.2011, 12:21     Теория плагинов
Цитата Сообщение от Iron Bug Посмотреть сообщение
P.S. но в моей реализации там есть "фабрики" - функции для создания и уничтожения представителя класса, реализованные внутри библиотеки. это требуется для совместимости библиотек, собранных разными компиляторами. ибо там выделение памяти разное и прочие различия имеются. сами "фабрики" имеют фиксированные имена и также цепляются через dlsym
Скажем так, чтобы уметь запустить функцию из подгруженной в run-time динамической библиотеки, нужно уметь как-то найти эту функцию. Единственный для этого способ - это по символьному имени функции. Надёжным образом это можно сделать только для тех функций (и переменных), имена которых НЕ подвергаются манглированию со стороны компилятора. Таким свойством обладают только функции (и переменные), реализованные на Си (или на Си++ внутри блока extern "C"). Поэтому такая "фабрика" - это единственный способ вызвать создание объекта извне библиотеки

Цитата Сообщение от Iron Bug Посмотреть сообщение
другой реализации "экспорта класса", кроме экспорта его данных, создать просто нельзя. ибо разные компиляторы создают разные физические реализации объекта
Не только поэтому. В языках Си и Си++ попросту нет возможности работать с динамически созданными типами. Любой тип, с которым идёт работа, должен быть виден в момент компиляции.

Цитата Сообщение от Iron Bug Посмотреть сообщение
поэтому мой метод - единственно возможный для использования перегруженных методов из динамических библиотек, собственно.
Именно так. А способов вызвать "новый" метод (т.е. не описанный в базовом классе), коими являются set и get в варианте niXman'а, попросту нет. В цитате слово "метод" выделил жирным - лучше в таком контексте использовать слово "способ", чтобы не путать с методами языка Си++
 
Текущее время: 03:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru