static void rdotnet_discussions_646729(REngine engine) { var setup = @"library(rdotnetsamples) rdotnetsamples::register_default_progress_handler() "; engine.Evaluate(setup); var myRFunction = @" my_r_calculation <- function() { for (i in seq(0, 100, by=20)) { rdotnetsamples::broadcast_progress_update(paste0('Some Update Message for ', i), i); } } "; engine.Evaluate(myRFunction); engine.Evaluate("my_r_calculation()"); var unixDllPath = engine.Evaluate("getLoadedDLLs()$rdotnetsamples[['path']]").AsCharacter()[0]; var dllPath = unixDllPath.Replace("/", "\\"); var dll = new DynamicInterop.UnmanagedDll(dllPath); TestCallback cback = new TestCallback(); CallBackHandlers cbh = new CallBackHandlers(); cback.MyHandler = cbh.ProcessProgress; string cFunctionRegisterCallback = "register_progress_handler"; register_default_progress_handler registerHandlerFun = dll.GetFunction<register_default_progress_handler>(cFunctionRegisterCallback); registerHandlerFun(cback.MyHandler); Console.WriteLine(); Console.WriteLine("After registering the callback with a function pointer to a C# function:"); Console.WriteLine(); engine.Evaluate("my_r_calculation()"); }
static void rdotnet_discussions_646729(REngine engine) { var setup = @"library(rdotnetsamples) rdotnetsamples::register_default_progress_handler() "; engine.Evaluate(setup); var myRFunction = @" my_r_calculation <- function() { for (i in seq(0, 100, by=20)) { rdotnetsamples::broadcast_progress_update(paste0('Some Update Message for ', i), i); } } "; engine.Evaluate(myRFunction); engine.Evaluate("my_r_calculation()"); var unixDllPath = engine.Evaluate("getLoadedDLLs()$rdotnetsamples[['path']]").AsCharacter()[0]; var dllPath = unixDllPath.Replace("/", "\\"); var dll = new DynamicInterop.UnmanagedDll(dllPath); TestCallback cback = new TestCallback(); CallBackHandlers cbh = new CallBackHandlers(); cback.MyHandler = cbh.ProcessProgress; string cFunctionRegisterCallback = "register_progress_handler"; register_default_progress_handler registerHandlerFun = dll.GetFunction <register_default_progress_handler>(cFunctionRegisterCallback); registerHandlerFun(cback.MyHandler); Console.WriteLine(); Console.WriteLine("After registering the callback with a function pointer to a C# function:"); Console.WriteLine(); engine.Evaluate("my_r_calculation()"); }