メインページ | アルファベット順一覧 | 構成 | ファイル一覧 | 構成メンバ | ファイルメンバ | 関連ページ

# dkcDLL.c

説明を見る。

    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 DKC_WINAPI_PROC_F_TYPE dkcGetProcWin32(DKC_DLL *dll,const char *id)
    00065 {
    00066     void *tp = dkcGetProcAddress(dll,id);
    00067     return (DKC_WINAPI_PROC_F_TYPE *)tp;
    00068 }
    00069 */
    00070 #endif