あながち無理じゃないよ。
たとえば
#module
#defcfunc add int x, int y
return x + y
#global
mes add(1,2)
をCソースに変換してみると、
(一部抜粋)
static void L0001( void ) {
// #defcfunc add int _prm0, int _prm1
// return _prm0+_prm1
PushFuncPrmI(0); PushFuncPrmI(1); CalcAddI();
Prgcmd(2,1);
return;
TaskSwitch(0);
}
static void L0000( void ) {
// mes add(1, 2)
PushFuncEnd();
PushInt(2);
PushInt(1);
PushModcmd(0,2);
Extcmd(15,1);
TaskSwitch(2);
}
のように変換されている。
add(L0001)を呼び出しているL0000を
・外から引数が与えられるようにする
・(mesの呼び出しを取り除く)
・add(L0001)の戻り値をL0000の中で取り出してL0000が返すようにする
・defファイルなり__declspec(dllexport)を使って関数をエクスポートする
などをいいと思うよ。
もちろんCソースの中には__HspInitという関数があって、
これはDLLMainなどの中で適切に呼び出す必要があるなど、
いろいろやらなければならない気がします。
自分では試してないのでうまくいくかはまったくわかりませんが。
あと、あくまでもこれはHSPでDLLを作る方法の候補であって、
ここではHSPでDLLを作ることの意義などに関しては議論しません。