主类动态的new一个动态库的类,然后执行动态库的某个函数。
在c中就是用dlopen,然后找到函数地址,然后执行。对应c++如何实现。
也就是说,我主程序通过参数来判断调用那个。so的那个类。
例子如下,c++不大会写,希望不会引起误会。
--主文件
CLASS AA:ABC(CHAR *A)
{
HHH(类名)=dlopen(.so)---不知道如何写
DEF = NEW HHH();
DEF.A();
}
--主文件编译时不知道此文件。
CLASS BB
{
int A();
}
--另一个so
CLASS CC
{
int A();
}
http://bbs.chinaunix.net/viewthread.php?tid=852200
QUOTE:原帖由 foxpro7 于 2008-6-13 22:56 发表

想在c++代 *** 中实现这么个功能。
主类动态的new一个动态库的类,然后执行动态库的某个函数。
在c中就是用dlopen,然后找到函数地址,然后执行。对应c++如何实现。
也就是说,我主程序 ...
用 Factory Method 像这样:
"myso01.h"
class Base
{
public :
virtual ~ Base ( ) { }
virtual void show ( ) = 0 ;
} ;
typedef Base * create_obj ( ) ;
typedef void destroy_obj ( Base * ) ;
"myso01.cc"
# include "myso01.h"
# include < iostream >
class ABC : public Base
{
public :
void show ( ) ;
} ;
void ABC : : show ( )
{
std : : cout < < "ABC" < < std : : endl ;
}
extern "C" Base * create ( )
{
return new ABC ;
}
extern "C" void destroy ( Base * p )
{
delete p ;
}
"main.cc"
# include "myso01.h"
# include < iostream >
# include < dlfcn . h >
int main ( )
{
void * p_lib = dlopen ( "./myso01.so" , RTLD_LAZY ) ;
if ( ! p_lib )
{
std : : cout < < dlerror ( ) < < std : : endl ;
return 1 ;
}
create_obj * create_abc = ( create_obj * ) dlsym ( p_lib , "create" ) ;
char * dlsym_error = dlerror ( ) ;
if ( dlsym_error )
会员注册
会员登录
个人空间