我需要使用C代码扩展我的ruby代码。我在我的c文件上有这个功能:
char * generateIt(char *valor) {
struct NESSIEstruct w;
u8 digest[DIGESTBYTES];
int i;
for(i=0; valor[i]!='\0'; ++i);
int sizeo = i;
NESSIEinit(&w);
NESSIEadd((u8*)valor, 8*sizeo, &w);
NESSIEfinalize(&w, digest);
return displayIt(digest, DIGESTBYTES);
}
为了让它可用于Ruby,在同一个文件中,我有这个:
void
Init_whirlpool(){
rb_mWhirlpool = rb_define_module("Whirlpool");
rb_cClass = rb_define_class_under(rb_mWhirlpool, "Class", rb_cObject);
rb_define_method(rb_cClass, "generate", generateIt, 1);
}
但是,当我尝试运行:make时,我收到此警告:
MacBook-Pro-de-Patricio:whirlpool psantos $ make compiling whirlpool.c whirlpool.c:2021:43:警告:不兼容的指针类型传递' char *(char )'参数类型' VALUE()()' [-Wincompatible-pointer-types] rb_define_method(rb_cClass, "生成",generateIt,1); ^ ~~~~~~~~~ /Users / psantos / .rvm / rubies / ruby-2.0.0-p598 / include /ruby-2.0.0 / ruby / ruby.h:1290:48: 注意:将参数传递给参数此处为void rb_define_method(VALUE,const char *,VALUE(*)(ANYARGS),int); 生成^ 1警告。
错误图片:(更清楚)
我该如何解决这个问题?
答案 0 :(得分:2)
rb_define_method()
采用Ruby VALUE
类型。
void rb_define_method(
VALUE klass,
const char *name,
VALUE (*func)(ANYARGS),
int argc
);