显式加载动态库(多平台)

来源:互联网 发布:什么软件测试兼容性 编辑:程序博客网 时间:2024/05/21 15:50

.h

class DlibX 

{
public:
DlibX ();
virtual ~DlibX ();
public:
void* GetFunction( const CHAR* szFuncName );
void FreeLibrary();
BOOL LoadLibrary( TCHAR* szPathName );
public:
HMODULE m_hModule;

};


.cpp 



#include "StdAfx.h"

#include "wunicode.h"
#include  DlibX.h"


#ifndef _WIN32
#include <dlfcn.h>
#endif



//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////


DlibX ::DlibX ():
m_hModule( NULL )
{


}


DlibX ::~DlibX ()
{
FreeLibrary();
}


BOOL DlibX ::LoadLibrary(TCHAR *szPathName)
{
if( NULL == szPathName )
return FALSE;
#ifdef _WIN32
m_hModule = ::LoadLibrary( szPathName );
if( NULL == m_hModule )
return FALSE;
#else
CHAR szTemp[256];
memset( szTemp,0,sizeof( szTemp ));
#ifdef _UNICODE
ConvertUnicodeToAnsi( szPathName,szTemp,256 );   //我的bolg文里有这个
#else
strcpy( szTemp,szPathName );
#endif
m_hModule = dlopen( szTemp,RTLD_NOW );
if( NULL == m_hModule ){
const CHAR *szError = dlerror();
return FALSE;
}
#endif
return TRUE;
}


void DlibX ::FreeLibrary()
{
if( m_hModule ){
#ifdef _WIN32
::FreeLibrary( m_hModule );
#else
dlclose( m_hModule );
#endif
m_hModule = NULL;
}
}


void* DlibX ::GetFunction(const CHAR *szFuncName)
{
if( NULL == m_hModule )
return NULL;


#ifdef _WIN32_WCE
USES_CONVERSION;
return GetProcAddress( m_hModule,A2W(szFuncName ));
#else
#ifdef _WIN32
return GetProcAddress( m_hModule,szFuncName );
#else
return dlsym( m_hModule,szFuncName );
#endif
#endif
}


1 0
原创粉丝点击