Chcę zadzwonić kod ruby z mojego własnego kodu C. W przypadku podniesienia wyjątku muszę zabezpieczyć kod ruby, który wywołuję. rb_protect wygląda następująco:jak rb_protect wszystko w ruby
VALUE rb_protect(VALUE (* proc) (VALUE), VALUE data, int * state)
Więc proc
musi być funkcja, która bierze VALUE
argumenty i zwraca VALUE
. Muszę zadzwonić do wielu funkcji, które nie działają w ten sposób. W jaki sposób mogę je zgłaszać, podnosząc wyjątki?
Myślałem o użyciu Data_Make_Struct
, aby zawinąć wszystko w jeden obiekt ruby i wywołać na nim metody. Data_Make_Struct
może sam zgłosić wyjątek. Jak mogę rb_protect
Data_Make_Struct
?