赞助连接

赞助连接

阅 读 文 章

C++中动态调用类,如何实现。

[来源:网上转载 (http://bbs.chinaunix.net) | 作者:网友(网络转载) | 时间:2008-06-14 | 浏览:人次 ]

想在c++代 *** 中实现这么个功能。

主类动态的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 )
TAG标签 : 实现 如何 调用 动态 std Base 然后 void dlsym_error

最新评论 共有0位网友发表了评论

发表评论

评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名:(注册)
密码:
验证码:
匿名发表
网站地图友情连接交流论坛网站投稿广告服务联系我们留言本站长统计
Some rights reserved: www.chmhome.com, 鄂ICP备07010232号 E-mail:chinakafei@live.com,QQ:552766
中国咖啡技术网(Chmhome):国外编程技术书籍,中文编程手册,经典编程文章,交流技术,技术软件下载,计算机论文,毕业论文.