实现C++ style的动态库函数加载器

动态库的动态加载在底层c运行库提供了三个函数 dlopen、dlsym、dlclose,非常简洁高效,但如果使用c++的方式,应该可以做到更好的易用性,或者更好的类型安全。

因此我们尝试了通过将动态库的导出方法通过定义类来固化,并且能使用c++模板来自动实现这些方法。

比如动态库memory.dll,包含了三个内存管理方法malloc,free,calloc,我们将这个库封装成了如下的Memory类:

struct Memory : DLL<Memory>
{
    IMPORT(malloc, (void*(*)(size_t)));
    IMPORT(free, (void(*)(void*)));
    IMPORT(calloc, (void*(*)(size_t,size_t)));
};

通过这个Memory类,通过声明的方式固化了动态库导出函数信息,并且可以动态加载对应库并调用其方法了:

    Memory::open("/usr/local/lib/memory.dll", RTLD_LAZY); //动态加载dll库
    void *pBuff = Memory::malloc(1024);                   //调用动态库的导出方法
    Memory::free(pBuff);
    Memory::close();

看起来是不是很酷:)

所有的秘密就藏在基类的DLL模板里,未完待续....






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值