実行中に動的リンクすれば、吐き出されたdll(hpi)でも利用可能な気はします。
使用方法が異なるので「宣言」に当たるかは微妙ですけど…
//==DLLの動的リンク使用=========================================
#module mod_DynamicLink
#uselib "kernel32.dll"
#cfunc _LoadLibrary "LoadLibraryA" sptr
#cfunc _GetProcAddress "GetProcAddress" sptr,sptr
#func _FreeLibrary "FreeLibrary" sptr
sDim pDll ;DLLファイル名の配列
Dim hDll ;DLLハンドルの配列
Dim cDll ;カレントのDLLハンドル
;--DLLの動的リンク("DllFileName") <stat:hDLL>
#deffunc dll_Load str p0, local a
a=-1,-1
ForEach hDll ;既存ならハンドル返すだけ
If(vartype(pDll)==2)&&(pDll.cnt==p0){a=cnt :Break}
If(pDll.cnt=="")&&(a.1<0){a.1=cnt}
Loop
If(a<0){ ;動的リンク追加
a=a.1 :If(a<0){a=Length(hDll)}
hDll.a=_LoadLibrary(p0)
If(hDll.a){pDll.a=p0}else{pDll.a=""}
}
If(hDll.a){cDll=hDll.a}
Return hDll.a
;--DLLの関数アドレス取得([hDll], "FuncName") = pFunc
#defcfunc dll_getFunc int p0, str p1, local a
If(p0){a.1=p0}else{a.1=cDll} :a=_GetProcAddress(a.1,p1) :If(a){cDll=a.1}
Return a
;--DLLの関数呼び出し([hDll], "FuncName", <Arg>, numArg) <stat:statFunc>
#deffunc dll_Func int p0, str p1, array pa, int p2, local a
a=dll_getFunc(p0,p1) :If(a){Return CallFunc(pa,a,p2)}
Return 0
;--DLLの解放(hDll)
#deffunc dll_Free int p0, local a
If(p0){a=p0}else{a=cDll :cDll=0} :If(a==0){Return 0}
ForEach hDll :If(hDll.cnt==a){_FreeLibrary hDll.cnt :hDll.cnt=0 :pDll.cnt=""} :Loop
Return
;__全動的DLLの解放()
#deffunc dll_Exit onexit
ForEach hDll :dll_Free hDll.cnt :Loop
Return
#global
*sample
Screen 0,320,240 :SysColor 15 :BoxF :SysColor 18
Pos 32,4 :Mes "Drag and Drop Files"
dll_Load("shell32.dll") :hShell32=stat ;動的リンク、一応ハンドル保持
arg=hWnd,1 :dll_Func hShell32,"DragAcceptFiles",arg,2
onCmd gosub *sample_DnD,$233 ;WM_DropFiles
Stop
*sample_DnD
sDim s,$400 :arg=wParam,-1,varptr(s),$400
dll_Func hShell32,"DragQueryFileA",arg,4 :num=stat
If(num<1){Goto *@f} :LogMes StrF("DropFiles %d",num)
SysColor 15 :BoxF :SysColor 18 :Pos 4,4
Repeat num
arg.1=cnt :dll_Func hShell32,"DragQueryFileA",arg,4
LogMes StrF(" %s",s) :Mes GetPath(s,8)
Loop
*@ :dll_Func hShell32,"DragFinish",arg,1 :Redraw 1 :Redraw 0
Return
・別途include用の改変ファイルを用意する手間が掛かるかもです
・dllの場所はどこでも良いという利点(?)が有ります