LINUX.ORG.RU

c++ class & shared library


0

0

Есть класс, скомпилированный в .so. Как из него создать объект? Что-то типа dlsym(module,"classname"). Если можно - пример. Спасибо.

anonymous

вот сниппет подгружающий ричэдит :)
без проверок и скорее всего с багами. у меня работает,
worx 4 me FYA.

static WNDCLASS wc;
static char str1[]="RichEd20.dll";
static char str2[]="RichEdit20A";

LoadLibrary(str1);
GetClassInfo(NULL,str2,&wc)
RegisterClass(&wc);

anonymous
()

> Есть класс, скомпилированный в .so. Как из него создать объект?

Вот так:


library.hpp
------------

class shared_class
{

// shared_class definition
...

};

shared_class * make_shared_class()
{
  return new shared_class();
}


library.cpp
-----------

// shared_class implementation
...


client.cpp
-----------

void * h = dlopen("libsharedclass.so" ...
void * make = dlsym(h, "make_shared_class");

shared_class * sc = static_cast<shared_class *()>(make)();

abbr
()
Ответ на: комментарий от anonymous

смотря чего ты хочешь, тебе же нужно знать какие методы ты хочешь звать?? тебе же нужен об'ект, можно сделать родительскии класс class foo { public: virtual int bar ();

};

ну а потом: class Thing: public foo { public: int bar () { return -1; } }

и foo * init_stuff() { return new Thing; }

я делал так, как тебе подойдет не знаю, смотри.... можно еще вытащить адреса функции члена класса _ZN2Thing3barEv ну или типа, тока это некрасиво....

anonymous
()
Ответ на: комментарий от abbr

>shared_class * sc = static_cast<shared_class *()>(make)();

В таком случае "Invalid static cast from type void * to type sgared_class *()()". Почему?

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

Ага, очень изящно, особенно когда надо STDAPI ф-ю сделать __declspec(__dllexport) ... 8))

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