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 }