PDA

View Full Version : سوال: invalid conversion from ‘void*’ to ‘int (*)(const char*, mode_t



arashmidos2020
سه شنبه 17 فروردین 1389, 06:53 صبح
سلام. چرا این کد در سی پلاس سی پلاس اررور میده؟در C که مشکلی نداره.
چطور می تونم کستینگ رو انجام بدم؟


#include <stdio.h>
#include <sys/stat.h>
#include <sys/user.h>
#include <sys/reg.h>
#include <dlfcn.h>

//define my system calls number
#define NUMBER_SYS 2
#define SYS_OPEN 1
#define SYS_MKDIR 2

#define DENY 0
#define ALLOW 1
#define READONLY 2

static const struct syscalls_struct
{
char* name;
int id;
}syscalls[NUMBER_SYS]={
{ "open", SYS_OPEN },
{ "mkdir", SYS_MKDIR }
};

// file system functions
//static int(*true_mkdir)(const char *, mode_t);

//changing real systemcall with my systemcall with dlsym
static void _init();

// define my function for new sys calls
int mkdir(const char *pathname, mode_t mode);
#include "main.h"

static int(*true_mkdir)(const char *, mode_t);
void _init()
{
void *libc_handle;
libc_handle = RTLD_NEXT;
true_mkdir = dlsym(libc_handle, "mkdir");
}

void GetDate()
{

}
int main()
{
struct user_regs_struct reges;



return 0;
}
error: invalid conversion from ‘void*’ to ‘int (*)(const char*, mode_t)’|

arashmidos2020
سه شنبه 17 فروردین 1389, 09:51 صبح
راستی با G++ کار می کنم

arashmidos2020
سه شنبه 17 فروردین 1389, 10:34 صبح
با typedef حل شد اما باز هم مشکل داره. چون dlsym رو به عنوان فانکشن نمی شناسه!