#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <dlfcn.h>
#include "log_def.h"
int dll_run(char *dll,char *func,const char *pFormat, ...)
{
void *FunctionLib; /* Handle to shared lib file */
int (*Function)(); /* Pointer to loaded routine */
const char *dlError; /* Pointer to error string */
char dll_file[128]; /* 动态库 */
int ret; /* return code */
char para[256]; /* 参数 */
va_list ap_list;
/* 装载动态库 */
memset(dll_file,0x00,sizeof(dll_file));
if (get_conf("DLL_PATH",dll_file)) {
write_log(ERROR_LOG,"%s|%d: ERROR: Do not find ITEM DLL_PATH !",__FILE__,__LINE__);
return -1;
}
strcat(dll_file,"/");
strcat(dll_file,dll);
/* LOAD DLL */
FunctionLib = dlopen(dll_file,RTLD_LAZY);
dlError = dlerror();
if( dlError ) {
write_log(ERROR_LOG,"%s|%d: dopen error: %s",__FILE__,__LINE__,dlError);
return (-1);
}
/* LOAD FUNCTION */
Function = dlsym( FunctionLib, func);
dlError = dlerror();
if( dlError ) {
write_log(ERROR_LOG,"%s|%d: dlsym error: %s",__FILE__,__LINE__,dlError);
/* CLOSE DLL HANDLE */
dlclose(FunctionLib);
return (-1);
}
va_start(ap_list, pFormat);
/* RUN */
memset(para,0x00,sizeof(para));
vsprintf(para, pFormat, ap_list);
ret = (*Function)(para);
if (ret) {
dlError = dlerror();
write_log(ERROR_LOG,"%s|%d: RUN error: %s",__FILE__,__LINE__,dlError);
}
va_end(ap_list);
dlclose(FunctionLib);
if (ret)
return -1;
else
return 0;
}
/*************************************************/
/*
int main()
{
dll_run("dll.so","p","%s|%s|%s|","1","2F2","3");
// dll_run("dll.so","p","");
return 0;
}
*/