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