/* File modwrap.c -- wrappers around the Caml functions */
#include <wtypes.h>
#include <winbase.h>
#include <stdio.h>
#include <string.h>
#include <caml/mlvalues.h>
#include <caml/callback.h>
int fib(int n)
{
static value * fib_closure = NULL;
if (fib_closure == NULL) fib_closure = caml_named_value("fib");
return Int_val(callback(*fib_closure, Val_int(n)));
}
char * format_result(int n)
{
static value * format_result_closure = NULL;
if (format_result_closure == NULL)
format_result_closure = caml_named_value("format_result");
return strdup(String_val(callback(*format_result_closure, Val_int(n))));
/* We copy the C string returned by String_val to the C heap
so that it remains valid after garbage collection. */
}
BOOL APIENTRY DllMain(HANDLE module, DWORD reason, void *reserved)
{
char * argv[2];
switch (reason) {
case DLL_PROCESS_ATTACH:
argv[0] = "mydll";
argv[1] = NULL;
caml_startup(argv);
break;
}
return TRUE;
}
syntax highlighted by Code2HTML, v. 0.9.1