一个dll_run的函数

#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;
}
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值