Dave Sims <davsims / gmail.com> writes: > I'm trying to write an interface to the Ruby regular expressions > engine using a C dll, but I'm neither a Ruby nor C wiz. Can someone > tell me what's wrong with the following: > > #include <ruby.h> > #include <windows.h> > > typedef struct RRegexp RegExp; > > int regExMatch(int pos, char *pattern, char *text) > { > RegExp *re = RREGEXP(rb_reg_new(pattern, 0, 1)); > result = rb_funcall(re, rb_intern("match"), 1, *text); > // re will be a Ruby nil if no match is found. > return RTEST(result); > } Your compiler should probably have given you a good number of warnings/errors. `result' is undeclared, for instance. Did you actually compile this code? This worked for me: int regExMatch(int pos, char *pattern, char *text) { VALUE re, str, result; re = rb_reg_new(pattern, strlen(pattern), 1); str = rb_str_new2(text); result = rb_funcall(re, rb_intern("match"), 2, str, INT2NUM(pos)); // re will be a Ruby nil if no match is found. return RTEST(result); } > I get a GPF on the first line of regExMatch. How are you using it? If you use anything in the ruby API, you'll probably need to have the ruby interpreter initialized (ruby_init()) before doing so. I don't know if you can use the regexp engine on its own. > I just need a C method equivalent of Regexp.match that I can export in > a dll. Is this even the best way to go about such a thing or is there > something better? If you just want to use regexps in C code, it seems overkill to link the whole ruby library. A regexp library like libpcre may suffice. HTH.