php 动态链接库加载,手动加载动态链接库 - pirtt的个人空间 - OSCHINA - 中文开源技术交流社区...

#ifndef __PLUGIN__DYNAMICMGR_H_

#define __PLUGIN__DYNAMICMGR_H_

class DynamicMgr

{

public:

~DynamicMgr(){free_lib();}

/** */

const char* get_name()const;

/** */

bool load_lib(const char* libName);

/** */

void* get_address(const char* symbolMane)const;

private:

void free_lib();

std::string __m_libName;

#if defined(__unix__) || defined(unix) || defined(linux)

void*__m_lib;

#else

HMODULE __m_lib;

#endif

};

#endif

const char* DynamicMgr::get_name()const

{

return __m_libName.c_str();

}

/*************************************************************

* Unix System

**************************************************************/

#if defined(__unix__) || defined(unix) || defined(linux)

#include

bool DynamicMgr::load_lib(const char* libName)

{

std::string strName = libName;

strName += ".so";

__m_lib = dlopen(strName.c_str(),RTLD_LAZY);

if (__m_lib)

{

__m_libName = strName.substr(0,strName.length()-4);

}

return (__m_lib != 0);

}

void* DynamicMgr::get_address(const char* symbolMane)const

{

if (__m_lib)

{

return (void*)dlsym(__m_lib,symbolMane);

}

return NULL;

}

void DynamicMgr::free_lib()

{

if (__m_lib)

{

dlclose(__m_lib);

__m_lib = NULL;

}

}

#endif

/*************************************************************

* Windows System

**************************************************************/

#ifdef _WIN32

bool DynamicMgr::load_lib(const char* libName)

{

std::string strName = libName;

strName += ".dll";

__m_lib = LoadLibraryA(strName.c_str());

if (__m_lib)

{

__m_libName = strName.substr(0,strName.length()-4);

}

return (__m_lib != 0);

}

void* DynamicMgr::get_address(const char* symbolMane)const

{

if (__m_lib)

{

return (void*)GetProcAddress(__m_lib, symbolMane);// be careful __stdcall&&__cdecl

}

return NULL;

}

void DynamicMgr::free_lib()

{

if (__m_lib)

{

FreeLibrary(__m_lib);

__m_lib = NULL;

}

}

#endif

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值