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 }
00060
00061 #ifdef WIN32
00062
00063
00064
00065
00066
00067
00068
00069
00070 #endif