The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Экспорт класса"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Экспорт класса"
Сообщение от Szef emailИскать по авторуВ закладки(??) on 12-Ноя-04, 13:20  (MSK)
Добрый день!
Не могу решить задачу - необходимо сделать динамическую библиотеку, которая написана на С++. Проблема в том, что я никак не могу экспортировать класс, чтобы потом его использовать..
Подскажите, как это сделать, чтобы средствами dlopen, dlsym (или другими какими), можно было бы использовать такую библиотеку.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Экспорт класса"
Сообщение от klalafuda Искать по авторуВ закладки on 12-Ноя-04, 13:36  (MSK)
>Добрый день!
>Не могу решить задачу - необходимо сделать динамическую библиотеку, которая написана на
>С++. Проблема в том, что я никак не могу экспортировать класс,
>чтобы потом его использовать..
>Подскажите, как это сделать, чтобы средствами dlopen, dlsym (или другими какими), можно
>было бы использовать такую библиотеку.

---lib.h---
class foo {
public :
    foo();
    virtual ~foo();
};

extern "C" {
class foo *create_foo();
void delete_foo(class foo *);
};
---lib.h---

---lib.cc---
#include "lib.h"

class foo * create_foo() {
    return new foo();
}

void delete_foo(class foo *foo_) {
    delete foo_;
}
---lib.cc---

из своего приложения импортируете create_foo/delete_foo и через них создаете/удаляете экземпляры класса. за счет того, что функции доступа объявлены как "C", проблем с декарацией имен уже не будет. надеюсь, идея понятна.

// wbr

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Экспорт класса"
Сообщение от Szef emailИскать по авторуВ закладки(??) on 12-Ноя-04, 15:30  (MSK)
>>Добрый день!
>>Не могу решить задачу - необходимо сделать динамическую библиотеку, которая написана на
>>С++. Проблема в том, что я никак не могу экспортировать класс,
>>чтобы потом его использовать..
>>Подскажите, как это сделать, чтобы средствами dlopen, dlsym (или другими какими), можно
>>было бы использовать такую библиотеку.
>
>---lib.h---
>class foo {
>public :
>    foo();
>    virtual ~foo();
>};
>
>extern "C" {
>class foo *create_foo();
>void delete_foo(class foo *);
>};
>---lib.h---
>
>---lib.cc---
>#include "lib.h"
>
>class foo * create_foo() {
>    return new foo();
>}
>
>void delete_foo(class foo *foo_) {
>    delete foo_;
>}
>---lib.cc---
>
>из своего приложения импортируете create_foo/delete_foo и через них создаете/удаляете экземпляры класса. за
>счет того, что функции доступа объявлены как "C", проблем с декарацией
>имен уже не будет. надеюсь, идея понятна.
>
>// wbr
Хмм.. Очень интересная фишка, обязательно попробую... спасибо!
Но прикол ещё в том, что хочется этому классу наследовать... Как быть тогда?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Экспорт класса"
Сообщение от klalafuda Искать по авторуВ закладки on 12-Ноя-04, 16:06  (MSK)
>Хмм.. Очень интересная фишка, обязательно попробую... спасибо!
>Но прикол ещё в том, что хочется этому классу наследовать... Как быть
>тогда?

http://www.isotton.com/howtos/C++-dlopen-mini-HOWTO/C++-dlopen-mini-HOWTO.html

ps: google is your friend :)

// wbr

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Экспорт класса"
Сообщение от Szef emailИскать по авторуВ закладки(??) on 12-Ноя-04, 23:01  (MSK)
>>Хмм.. Очень интересная фишка, обязательно попробую... спасибо!
>>Но прикол ещё в том, что хочется этому классу наследовать... Как быть
>>тогда?
>
>http://www.isotton.com/howtos/C++-dlopen-mini-HOWTO/C++-dlopen-mini-HOWTO.html
>
>ps: google is your friend :)
>
>// wbr
Спасибо за ссылку, прочитал с интересом. Но по-моему там не описано решение моей проблемы. Может я неясно излагаю - поясню на примере.
В библиотеке находится класс A. Я хочу его пронаследовать (class B : public A) и использовать объект производного класса для дальнеёшей работы. А примеры с class factory functions, я так понял, создают и возвращают объект исходного(базового) класса. Или я не так понял?...

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Экспорт класса"
Сообщение от Vladislav Lazarenko emailИскать по авторуВ закладки on 12-Ноя-04, 23:12  (MSK)
Солнце, все, что связано с наследование обрабатывается на этапе компиляции.  Нельзя с этими штуками играть в run-time ...

Хотя можно кое-что другое. Описываешь интерфейс, а в DLL этот класс наследуешь и переопределяешь... пишешь какую-то своб имплементацию.
Потом поинтеру базового класса присваиваешь инстанс своего мутантика) И, не подозревая ничего, о реализации .. работаешь.

Но наследовать черт знает что в run-time из DLL'ки (SO'шки) низя :)

-- WBR

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Экспорт класса"
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 14-Ноя-04, 19:39  (MSK)
>Солнце, все, что связано с наследование обрабатывается на этапе
>компиляции.  Нельзя с этими штуками играть в run-time ...
>

А если очень хочется, значит, есть два варианта:
- сменить язык программирования на язык с прямой поддержкой
метаобъектного протокола;
- поиграться с "отражениями" (reflection)
   http://www.vollmann.com/en/pubs/meta/meta/meta.html

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Экспорт класса"
Сообщение от klalafuda Искать по авторуВ закладки on 15-Ноя-04, 09:37  (MSK)
>>Солнце, все, что связано с наследование обрабатывается на этапе
>>компиляции.  Нельзя с этими штуками играть в run-time ...
>>
>
>А если очень хочется, значит, есть два варианта:
> - сменить язык программирования на язык с прямой поддержкой
>метаобъектного протокола;
> - поиграться с "отражениями" (reflection)
>   http://www.vollmann.com/en/pubs/meta/meta/meta.html

- или не менять язык и оставаться в пределах C++, но взять уже готовый framework. например, CORBA.

// wbr

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру