No, there's just a slight catch with external_define. I'm not sure how Josh is choosing to handle it, there are of course multiple options. In fact the last time I stuck my head in on this point was a while ago, so I won't say more for risk of giving misinformation.
As you've seen from before, I'm not one to think before I post
external_define("thing.dll","thingy",ty_real,1,ty_string);
could map to something like
//external_define(char*dllfile,char*procname,int args,types[])
if(GetModuleHandle(dllfile)==NULL)LoadLibrary(dllfile); //"thing.dll"
//you could have a struct called "proc"
proc->addr=GetProcAddress(GetModuleHandle(dllfile),procname); //"thingy"
proc->ret=type; //ty_real
proc->types=(char*)malloc(args);
for(int i=0;i<args;i++)
{
proc->types[i]=types[i];
}
And there's my oh-my-goodness-I-hope-I-haven't-made-any-stupid-mistakes-again of the day.