00001
00008 #include "dkcDLL.h"
00009
00010
00011 DKC_DLL *WINAPI dkcLoadLibrary(const char *filename){
00012 DKC_DLL *p = NULL;
00013 p = dkcAllocate(sizeof(DKC_DLL));
00014 if(NULL==p) return NULL;
00015
00016 #ifdef WIN32
00017 p->mHandle = LoadLibrary(filename);
00018 #else
00019 p->mHandle = dlopen(filename, RTLD_NOW | RTLD_GLOBAL);
00020 #endif
00021 if(p->mHandle == 0){
00022 goto Error;
00023 }
00024 return p;
00025 Error:
00026 dkcFree(&p);
00027 return NULL;
00028 }
00029
00030 #ifdef _MSC_VER
00031 #pragma warning(disable:4054)
00032 #endif
00033 void* WINAPI dkcGetProcAddress(DKC_DLL *dll,const char *id){
00034 if(NULL==dll || NULL==dll->mHandle){
00035 return NULL;
00036 }
00037 #ifdef WIN32
00038 return (void *)GetProcAddress(dll->mHandle,id);
00039 #else
00040 return (void *)dlsym(dll->mHandle, id);
00041 #endif
00042 }
00043 #ifdef _MSC_VER
00044 #pragma warning(default:4054)
00045 #endif
00046
00047 int WINAPI dkcUnloadLibrary(DKC_DLL **pp){
00048 if(NULL==pp || NULL==*pp || NULL==(*pp)->mHandle){
00049 return edk_FAILED;
00050 }
00051
00052 #ifdef WIN32
00053 FreeLibrary((*pp)->mHandle);
00054 #else
00055 dlclose((*pp)->mHandle);
00056 #endif
00057 return dkcFree(pp);
00058 }