山本です。

>ただ、bcc32では現在 Errno::EINVAL が出ていますが、io.c(2418) をいじって
>Errno::EMFILE にしたほうがいいと思います。

これは無理かもしれません。bcc32 RTL のソースを見る限り、処理に失敗したときとか、
ハンドルが負の数のときにも NULL を返すようになってるので・・・悩ましいです。