- 论坛徽章:
- 0
|
给一个我写的应用:
#include <dlfcn.h>
shobj_path:动态调用库文件名称,带路径
func_name:函数名称,字符串的,这里可以是你的aaa,或者其他什么都可以,只要是在shobj_path里面定义的。
para:参数列表,可以传入或返回数值,调用之前需要实例化。
int DLCall(char *shobj_path, char *func_name, char **param)
{
void *shobj_handle, (*func_ptr)();
char call_path[1024];
if (shobj_path[0] == '/')
strcpy(call_path, shobj_path);
else
{
call_path[0] = 0;
getwd(call_path);
strcat(call_path, "/");
strcat(call_path, shobj_path);
}
shobj_handle = (char*)dlopen(call_path, RTLD_LAZY);
call_errmsg=(char *)dlerror();
if (call_errmsg != NULL)
{
return 0;
}
func_ptr = (void (*)())dlsym(shobj_handle, func_name);
call_errmsg=(char *)dlerror();
if (call_errmsg != NULL)
{
dlclose(shobj_handle);
return -1;
}
if (param == NULL)
(*func_ptr)();
else
(*func_ptr)(param);
dlclose( shobj_handle );
return 1;
}
[ 本帖最后由 jlogzl 于 2007-9-6 15:03 编辑 ] |
|