まず、dllのヘッダには関数の名前しかありません。シグネチャはありません。
(IMAGE_EXPORT_DIRECTORYを参照)
よって、ImageDirectoryEntryToData とかのAPI呼び出しても無理です。
***
ご存知かと思いますが、dll内の関数は(もとはCとかで書かれますが)機械語で書かれています。
機械語には関数というものがありません。
Cコードがコンパイルされると、「引数」をスタックに積んで(ラベル)に飛んで、その先でスタックから「引数」
を取り出し、処理が終わるともとに戻る、という処理に置き換えられます。
HSPで書くとこんな感じですかね
引数リスト = 1, 2, 3
gosub *和を求める
mes 戻り値
*和を求める
引数1 = 引数リスト(0)
引数2 = 引数リスト(1)
引数3 = 引数リスト(2)
戻り値 = 引数1 + 引数2 + 引数3
return
(HSPにはスタックが標準でないのでそこら辺は目をつぶってください)
つまり、機械語にコンパイルされると(少なくとも86系では)Cにおける関数シグネチャのようなものは
全て失われます。引数を取り出す処理に置き換えられるわけです。
***
ただ、引数の数を取り出す方法が全く無いかと言われると、そういうこともない?かもしれません。
引数に関する情報がなくなって、引数を取り出す処理に置き換えられると言いましたが、それはつまり
「引数を取り出す処理」を解析すれば引数の数がわかる、ということです。
上の例における
引数1 = 引数リスト(0)
引数2 = 引数リスト(1)
引数3 = 引数リスト(2)
の部分ですね。
やったことないからわかりませんが、retまたはpushが出てくるまでpopの数を数えれば行けるんじゃないかな?
機械語を逆アセンブリする必要がありますが、FLOSSの逆アセンブリライブラリなんて探せばいくらでもあるので、
例:
https://www.capstone-engine.org
頑張ればできると思いますよ。
まあ、だいぶ頑張ることになると思いますが。
そうかんたんにできるものなら誰かが作ってるだろうしね。